使用外部表訪問監聽日誌

JohnTam10發表於2011-02-27
    某天工作是使用外部表載入監聽日誌資訊,觀察並分析使用者連線數變化趨勢
    按照eygle循序漸進oracle的教程一步步進行:

測試使用外部表先建立目錄:
connect  / as sysdba
create(replace) directory sqldr as 'E:\app\john.tam\oradata\sqldr';
 
SQL> select * from dba_directories where directory_name = 'SQLDR';

OWNER DIRECTORY_ DIRECTORY_PATH
------------------------------ ---------- ------------------------------
SYS SQLDR E:\app\john.tam\oradata\sqldr
 
然後可以建立外部表了,下面是流程:
 
建立指向監聽器日誌目錄的Driectory:
SQL> select * from dba_directories where directory_name = 'SQLDR';

OWNER DIRECTORY_ DIRECTORY_PATH
------------------------------ ---------- ------------------------------
SYS SQLDR E:\app\john.tam\oradata\sqldr

SQL> create or replace directory LISTENER_LOG
  2 as 'E:\app\john.tam\product\11.2.0\dbhome_1\NETWORK\log'
  3 /
 
SQL> select * from dba_directories where DIRECTORY_NAME='LISTENER_LOG';

OWNER DIRECTORY_ DIRECTORY_PATH
------------------------------ ---------- ------------------------------
SYS LISTENER_L E:\app\john.tam\product\11.2.0
                               OG \dbhome_1\NETWORK\log
 
 
建立外部表:
建立指向監聽器日誌的外部表:
SQL> CREATE TABLE listener_log(text VARCHAR2(4000))
  2 ORGANIZATION EXTERNAL (
  3 TYPE oracle_loader
  4 DEFAULT DIRECTORY listener_log
  5 ACCESS PARAMETERS (
  6 RECORDS DELIMITED BY NEWLINE
  7 NOBADFILE
  8 NOLOGFILE
  9 NODISCARDFILE
 10 )
 11 LOCATION ('listener.log')
 12 )
 13 REJECT LIMIT UNLIMITED
 14 /

Table created.
 
查詢外部表
現在可以通過SQL查詢和訪問外部表的資料了:(監聽日誌共190000行,但12月份的資訊都有19000以上行)
SQL> set pagesize 99
SQL> select * from listener_log where rownum < 12;
select * from listener_log where rownum < 12
*
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEFETCH callout
ORA-29400: data cartridge error
KUP-04020: found record longer than buffer size supported, 524288, in
E:\app\john.tam\product\11.2.0\dbhome_1\NETWORK\log\listener.log

資料量太大,表內容不能顯示。
其實
這是因為匯入的txt文字沒用按格式換行。系統預設一行來處理,資料量當然太大
 
 
現抽取10年12月1日的資訊生成表:
建立指向監聽器日誌目錄的Driectory:

SQL> create or replace directory LISTENER121_LOG
  2 as 'E:\app\john.tam\product\11.2.0\dbhome_1\NETWORK\log'
  3 /
 
SQL> select * from dba_directories where DIRECTORY_NAME='LISTENER121_LOG';

OWNER DIRECTORY_ DIRECTORY_PATH
------------------------------ ---------- ------------------------------
SYS LISTENER_L E:\app\john.tam\product\11.2.0
                               OG \dbhome_1\NETWORK\log
 
 
建立外部表:
建立指向監聽器日誌的外部表:
SQL> CREATE TABLE listener_log(text VARCHAR2(4000))
  2 ORGANIZATION EXTERNAL (
  3 TYPE oracle_loader
  4 DEFAULT DIRECTORY listener121_log 
  5 ACCESS PARAMETERS (
  6 RECORDS DELIMITED BY NEWLINE
  7 NOBADFILE
  8 NOLOGFILE
  9 NODISCARDFILE
 10 )
 11 LOCATION ('listener121.log')
 12 )
 13 REJECT LIMIT UNLIMITED
 14 /

Table created.

這次的查詢就成功了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24582392/viewspace-688042/,如需轉載,請註明出處,否則將追究法律責任。

相關文章