Oralce数据导入问题处理(SYSTEM.PROC_AUDIT与审计)

本文解决了一个特定的Oracle数据库问题:当从一个开启了审计的数据库导出数据并导入到另一个未开启审计的数据库时,执行查询遇到ORA-06550错误。通过调整目标数据库的审计配置及修复SYSTEM.PROC_AUDIT对象,最终解决了问题。
摘要由CSDN通过智能技术生成

将A数据的USERNAME用户的数据导出后,再导入到B数据库中的USERNAME时,在USERNAME用户下在执行表数据查询时出现如下问题:
ORA-06550: 第 1 行, 第 7 列:
PLS-00201: 必须声明标识符 'SYSTEM.PROC_AUDIT'
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored

出现这个问题是由于A数据库打开了审计,而导入到B数据库时,B数据库审计没有打开,数据库中没有SYSTEM.PROC_AUDIT对象,导致上述问题.
问题解决过程如下:
1)以sysdba登录数据库:

D:\Users\Administrator>sqlplus / as sysdba
2) 显示当前审计参数:
SQL> show parameter audit;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest                      string      J:\APP\ADMINISTRATOR\ADMIN\ORC
                                                 L\ADUMP
audit_sys_operations                 boolean     FALSE
audit_trail                          string      DB
3) 启用审计.
SQL> alter system set audit_sys_operations=TRUE scope=spfile;

系统已更改。
4)查看新的状态,还是显示审计操作没打开,需重新启动数据库:
SQL> show parameter audit;

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------------
audit_file_dest                      string      J:\APP\ADMINISTRATOR\ADMIN
                                                 L\ADUMP
audit_sys_operations                 boolean     FALSE
audit_trail                          string      DB
5)重启数据库
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 3056513024 bytes
Fixed Size                  2179656 bytes
Variable Size            1644170680 bytes
Database Buffers         1392508928 bytes
Redo Buffers               17653760 bytes
数据库装载完毕。
数据库已经打开。
6)重新查看审计状态,审计已打开.
SQL> show parameter audit;

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------------
audit_file_dest                      string      J:\APP\ADMINISTRATOR\ADMIN
                                                 L\ADUMP
audit_sys_operations                 boolean     TRUE
audit_trail                          string      DB
SQL> conn USERNAME/PWDXXXXXX;
已连接。
7)查询表数据,错误依然,但错误换成了SYSTEM.PROC_AUDIT无效:
SQL> select * from corporationhot;
select * from corporationhot
              *
第 1 行出现错误:
ORA-06550: 第 1 行, 第 14 列:
PLS-00905: 对象 SYSTEM.PROC_AUDIT 无效
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
8)将对象SYSTEM.PROC_AUDIT授权给USERNAME.
SQL> grant execute on SYSTEM.PROC_AUDIT TO USERNAME;

授权成功。
9)再次以USERNAME登录,执行数据表查询,提示对象 SYSTEM.PROC_AUDIT 无效;因为对象已经授权,出现
这种状况可能是对象有错误.
SQL> conn USERNAME/PWDXXXXXX;
已连接。
SQL> select * from TABLENAME;
select * from TABLENAME              *
第 1 行出现错误:
ORA-06550: 第 1 行, 第 14 列:
PLS-00905: 对象 SYSTEM.PROC_AUDIT 无效
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored

10) 找到SYSTEM.PROC_AUDIT存储过程,发现有编译错误,提示sys.v_$sql,v$sql_bind_capture,sys.v_$session为无
效标识符,由于上述对象是存在的,而且可以查询,因此怀疑是权限设置问题,做如下授权:

SQL> conn / as sysdba;
已连接。
SQL> grant all on sys.v_$sql to system
  2  ;

授权成功。

SQL> grant all on v$sql_bind_capture to system;

授权成功。

SQL> grant all on sys.v_$session to system;

授权成功。

11)SYSTEM.PROC_AUDIT编译通过后,以USERNAME登录数据库,查看表数据恢复正常,问题解决.
为了验证错误是不是导出时审计是开的,导入时审计未打开所致,重新将审计关闭:

SQL>  alter system set audit_sys_operations=FALSE scope=spfile;

系统已更改。

SQL> restart;
SP2-0042: 未知命令 "restart" - 其余行忽略。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。

Total System Global Area 3056513024 bytes
Fixed Size                  2179656 bytes
Variable Size            1644170680 bytes
Database Buffers         1392508928 bytes
Redo Buffers               17653760 bytes
数据库装载完毕。
数据库已经打开。
12)数据库重启后,以USERNAME用户登录查询数据正常.

 

 

PS:如果你不需要审计,一个更简单的方法就是用System用户自己创建一个什么都不做的PROC_AUDIT存储过程,把权限赋给需要的用户即可.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值