Oralce数据导入出现(SYSTEM.PROC_AUDIT)问题处理方法
程序员文章站
2023-10-22 23:16:29
将a数据的username用户的数据导出后,再导入到b数据库中的username时,在username用户下在执行表数据查询时出现如下问题: ora-06550: 第 1...
将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用户登录查询数据正常.
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用户登录查询数据正常.
上一篇: Windows10下mysql 8.0.12解压版安装配置方法图文教程
下一篇: 干炸蘑菇怎么做