使用外部表檢視ORACLE報警日誌

目得:首先了解什麼是外部表,與其它表的區別,建立一個簡單的外部表(主要看操作過程),最後我們用外部表檢視ORACLE報警日誌

1.瞭解oracle外部表

外部表定義:結構被存放在資料字典,而表資料被放在OS檔案中的表
作用:在資料庫中查詢OS檔案的資料,還可以將OS檔案資料裝載到資料庫中
與其它表的區別:在外部表上不能執行DML操作,也不能在外部表上建索引,只能執行select操用

2.建一個簡單的外部表

1.建一個OS上的檔案
因為外部表主要是檢視OS上的檔案,首先在OS上建一個檔案
mkdir -p /oracle/ext
vi /oracle/ext/ext.dat
10,20,30
40,50,60
70,80,90

2.授予使用者許可權,並建立目錄物件
在此我們先建一個新使用者
create user test identified by “123” default tablespace test quota unlimited on test;
使用者授權
SQL> grant create any directory to test;

建立目錄物件
SQL> conn test / 123

Connected.

SQL> create directory ext as `/oracle/ext`;

Directory created.
3.建立外部表
SQL> create table exttable(

id number,name varchar2(10),i number

)organization external

(type oracle_loader

default directory ext

access parameters

(records delimited by newline

fields terminated by `,`

)location(`ext.dat`)

);
4.測試
SQL> select * from exttable;

 

        ID NAME                I
———- ———- ———-
        10 20                 30
        40 50                 60
        70 80                 90
測試成功,可見在資料庫中可以查詢OS檔案的資料

2. 使用外部表檢視oracle報警日誌

由於在上面實驗中已建立了一個使用者,並賦相應的許可權,而且也有了OS檔案(即報警檔案alert_SID.log),所以在此直接建立目錄物件並建立外部表就可以了。
1.建立目錄物件
SQL> conn test / 123

Connected.

SQL> create directory bdump as `/oracle/u01/app/oracle/admin/db2/bdump`;
Directory created.
2.建立外部表
SQL> create table alert_log(

text varchar2(400)

)organization external

(type oracle_loader

default directory bdump

access parameters

(records delimited by newline

)location(`alert_db2.log`)

);
3.測試
首先檢視能否查到alert_db2.log的內容
SQL> select * from alert_log where rownum < 10;

 

TEXT

——————————————————————————–

Thu Jun 11 00:51:46 2009

Starting ORACLE instance (normal)

Cannot determine all dependent dynamic libraries for /proc/self/exe

Unable to find dynamic library libocr10.so in search paths

RPATH = /ade/aime1_build2101/oracle/has/lib/:/ade/aime1_build2101/oracle/lib/:/a

de/aime1_build2101/oracle/has/lib/:

 

LD_LIBRARY_PATH is not set!

The default library directories are /lib and /usr/lib

Unable to find dynamic library libocrb10.so in search paths

Unable to find dynamic library libocrutl10.so in search paths

 

9 rows selected.
測試成功
然後我們測試查報警資訊’ORA-%’
SQL> select * from alert_log where text like `ORA-%`;

 

TEXT

——————————————————————————–

ORA-00202: control file: `/oracle/u01/app/oracle/product/10.2.0/db2/dbs/cntrldb2

.dbf`

 

ORA-27037: unable to obtain file status

ORA-205 signalled during: ALTER DATABASE   MOUNT…

ORA-00301: error in adding log file `/home/oracle/oracle/oradata/testdb/redo01.l

og` – file cannot be created

 

ORA-27040: file create error

ORA-1501 signalled during: CREATE DATABASE db2

ORA-00200: control file could not be created

 

TEXT

——————————————————————————–

ORA-00202: control file: `/oracle/u01/app/oracle/product/10.2.0/db2/dbs/cntrldb2

.dbf`

 

ORA-27038: created file already exists

ORA-1501 signalled during: CREATE DATABASE db2

ORA-00200: control file could not be created

ORA-00202: control file: `/oracle/u01/app/oracle/product/10.2.0/db2/dbs/cntrldb2

.dbf`

 

ORA-27038: created file already exists

ORA-1501 signalled during: CREATE DATABASE db2
測試成功,
可見我們可以使用外部表來方便的檢視ORACLE的報警資訊.