Oralce數(shù)據(jù)導(dǎo)入出現(xiàn)(SYSTEM.PROC_AUDIT)問題處理方法

A數(shù)據(jù)庫打開了審計,而導(dǎo)入到B數(shù)據(jù)庫時,B數(shù)據(jù)庫審計沒有打開,數(shù)據(jù)庫中沒有SYSTEM.PROC_AUDIT對象,本文將此問題的解決方法,需要的朋友可以參考下

將A數(shù)據(jù)的USERNAME用戶的數(shù)據(jù)導(dǎo)出后,再導(dǎo)入到B數(shù)據(jù)庫中的USERNAME時,在USERNAME用戶下在執(zhí)行表數(shù)據(jù)查詢時出現(xiàn)如下問題:
ORA-06550: 第 1 行, 第 7 列:
PLS-00201: 必須聲明標(biāo)識符 ‘SYSTEM.PROC_AUDIT’
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
出現(xiàn)這個問題是由于A數(shù)據(jù)庫打開了審計,而導(dǎo)入到B數(shù)據(jù)庫時,B數(shù)據(jù)庫審計沒有打開,數(shù)據(jù)庫中沒有SYSTEM.PROC_AUDIT對象,導(dǎo)致上述問題.

問題解決過程如下:
1)以sysdba登錄數(shù)據(jù)庫:
D:UsersAdministrator>sqlplus / as sysdba

2) 顯示當(dāng)前審計參數(shù):
SQL> show parameter audit;
NAME TYPE VALUE
———————————— ———– ——————————
audit_file_dest string J:APPADMINISTRATORADMINORC
LADUMP
audit_sys_operations boolean FALSE
audit_trail string DB

3) 啟用審計.
SQL> alter system set audit_sys_operations=TRUE scope=spfile;
系統(tǒng)已更改。

4)查看新的狀態(tài),還是顯示審計操作沒打開,需重新啟動數(shù)據(jù)庫:
SQL> show parameter audit;
NAME TYPE VALUE
———————————— ———– ————————–
audit_file_dest string J:APPADMINISTRATORADMIN
LADUMP
audit_sys_operations boolean FALSE
audit_trail string DB

5)重啟數(shù)據(jù)庫
SQL> shutdown immediate
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup
ORACLE 例程已經(jīng)啟動。
Total System Global Area 3056513024 bytes
Fixed Size 2179656 bytes
Variable Size 1644170680 bytes
Database Buffers 1392508928 bytes
Redo Buffers 17653760 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。

6)重新查看審計狀態(tài),審計已打開.
SQL> show parameter audit;
NAME TYPE VALUE
———————————— ———– ————————–
audit_file_dest string J:APPADMINISTRATORADMIN
LADUMP
audit_sys_operations boolean TRUE
audit_trail string DB
SQL> conn USERNAME/PWDXXXXXX;
已連接。

7)查詢表數(shù)據(jù),錯誤依然,但錯誤換成了SYSTEM.PROC_AUDIT無效:
SQL> select * from corporationhot;
select * from corporationhot
*
第 1 行出現(xiàn)錯誤:
ORA-06550: 第 1 行, 第 14 列:
PLS-00905: 對象 SYSTEM.PROC_AUDIT 無效
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored

8)將對象SYSTEM.PROC_AUDIT授權(quán)給USERNAME.
SQL> grant execute on SYSTEM.PROC_AUDIT TO USERNAME;
授權(quán)成功。

9)再次以USERNAME登錄,執(zhí)行數(shù)據(jù)表查詢,提示對象 SYSTEM.PROC_AUDIT 無效;因為對象已經(jīng)授權(quán),出現(xiàn)這種狀況可能是對象有錯誤.
SQL> conn USERNAME/PWDXXXXXX;
已連接。
SQL> select * from TABLENAME;
select * from TABLENAME *
第 1 行出現(xiàn)錯誤:
ORA-06550: 第 1 行, 第 14 列:
PLS-00905: 對象 SYSTEM.PROC_AUDIT 無效
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored

10) 找到SYSTEM.PROC_AUDIT存儲過程,發(fā)現(xiàn)有編譯錯誤,提示sys.v_$sql,v$sql_bind_capture,sys.v_$session為無
效標(biāo)識符,由于上述對象是存在的,而且可以查詢,因此懷疑是權(quán)限設(shè)置問題,做如下授權(quán):
SQL> conn / as sysdba;
已連接。
SQL> grant all on sys.v_$sql to system
2 ;
授權(quán)成功。
SQL> grant all on v$sql_bind_capture to system;
授權(quán)成功。
SQL> grant all on sys.v_$session to system;
授權(quán)成功。

11)SYSTEM.PROC_AUDIT編譯通過后,以USERNAME登錄數(shù)據(jù)庫,查看表數(shù)據(jù)恢復(fù)正常,問題解決.
為了驗證錯誤是不是導(dǎo)出時審計是開的,導(dǎo)入時審計未打開所致,重新將審計關(guān)閉:
SQL> alter system set audit_sys_operations=FALSE scope=spfile;
系統(tǒng)已更改。
SQL> restart;
SP2-0042: 未知命令 “restart” – 其余行忽略。
SQL> shutdown immediate;
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup;
ORACLE 例程已經(jīng)啟動。
Total System Global Area 3056513024 bytes
Fixed Size 2179656 bytes
Variable Size 1644170680 bytes
Database Buffers 1392508928 bytes
Redo Buffers 17653760 bytes
數(shù)據(jù)庫裝載完畢。
數(shù)據(jù)庫已經(jīng)打開。

12)數(shù)據(jù)庫重啟后,以USERNAME用戶登錄查詢數(shù)據(jù)正常.

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊8 分享