ORA-48167: invalid argument for checking ADR initialization
Cause: Invalid arguments were specified for the routine to check ADR initialization.
Action: Check the inputs to the ADR initialization routine.
ORA-48167: invalid argument for checking ADR initialization 错误指的是检查Automatic Diagnostic Repository (ADR)初始化的调用中使用的参数不正确。
ORA-48167: invalid argument for checking ADR initialization
Cause: An invalid argument was supplied to the check for ADR initialization.
Action: Supply a valid argument for checking ADR initialization.
一般情况下,当检查ADR初始状态时会出现ORA-48167错误,如:
SQL> alter session set container=ORCLPDB1;
Session altered.
SQL> show parameter control
NAME TYPE VALUE
———————————— ———– ——————————
control_files string /u01/app/oracle/oradata/ORCL/control01.ctl
SQL> show parameter adr
NAME TYPE VALUE
———————————— ———– ——————————
diagnostic_dest string /u01/app/oracle/diag/rdbms/orcl/ORCL
adr_base string
SQL> execute dbms_diagnostics.check_adr_base(diag_dest=>’not_set’);
BEGIN dbms_diagnostics.check_adr_base(diag_dest=>’not_set’); END;
*
ERROR at line 1:
ORA-48167: invalid argument for checking ADR initialization
1.正确指定ADR基础路径
检查并修改ADR_BASE。可以使用如下语句获取ADR_BASE,确保其显示在spfile指定的初始化参数文件中(通常spfile+SID.ora):
SQL> SHOW PARAMETER adr_base
如果ADR_BASE没有设置,可以使用以下语句指定ADR路径:
SQL> ALTER SYSTEM SET adr_base=’/u01/app/oracle/diag’ SCOPE=SPFILE;
笔者一般建议在ADR_BASE参数中设定与DIAGNOSTIC_DEST相同的值,如:
SQL> ALTER SYSTEM SET adr_base=’/u01/app/oracle/diag/rdbms/orcl/ORCL’ SCOPE=SPFILE;
2.重启数据库
为了使上述更改生效,重启数据库实例(当然,可以改为重载初始化参数,但建议重启数据库实例):
SQL> SHUTDOWN IMMEDIATE;
数据库关闭完成后,重新启动实例:
SQL> STARTUP;
3.再次检查ADR基础路径
此时确认ADR_BASE是否已正确指定:
SQL> SHOW PARAMETER adr_base
4.测试检查命令
再次执行检查命令,看是否测试是否通过:
SQL> execute dbms_diagnostics.check_adr_base(diag_dest=>’not_set’);
PL/SQL procedure successfully completed.