ORA-20001 AND ORA-06512
مسعود حاجی حسن پور | جمعه, ۱ دی ۱۳۹۶، ۰۹:۵۳ ق.ظ |
۱ نظر
سلام خدمت دوستان عزیزم
احتمالا تا الان همگی نسخه Oracle 12c را به صورت Container DB نصب کردید. اگر به alert log نگاه انداخته باشید error های زیر را خواهید دید:
Errors in file /u01/app/oracle/diag/rdbms/db12c/db12c/trace/db12c_j000_38330.trc: ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_43" ORA-20001: Statistics Advisor: Invalid task name for the current user ORA-06512: at "SYS.DBMS_STATS", line 47207 ORA-06512: at "SYS.DBMS_STATS_ADVISOR", line 882 ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 20059 ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 22201 ORA-06512: at "SYS.DBMS_STATS", line 47197 2018-01-14T08:13:48.135989+03:30 Errors in file /u01/app/oracle/diag/rdbms/db12c/db12c/trace/db12c_j000_38436.trc: ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_45" ORA-20001: Statistics Advisor: Invalid task name for the current user ORA-06512: at "SYS.DBMS_STATS", line 47207 ORA-06512: at "SYS.DBMS_STATS_ADVISOR", line 882 ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 20059 ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 22201 ORA-06512: at "SYS.DBMS_STATS", line 47197 2018-01-14T08:33:49.941839+03:30
با من همراه باشید تا دلیل و چگونگی حل مشکل را دریابیم.
- علت وجود مشکل:
وقتی دیتابیس را با template های General_Purpose.dbc, Data_Warehouse.dbc میسازیم (دقت شود که اگر در زمان نصب نیز از پایگاه داده بخواهید که یک PDB بسازد باز هم از dbca استفاده خواهد کرد) یا یک pdb را از روی یک seed database بسازید در پلتفرمهای Linux, Solaris مشکل را مشاهده خواهید نمود.
دلیل مشکل در حقیقت عدم وجود Stats Advisor Tasks می باشد:
SQL> select name, ctime, how_created from sys.wri$_adv_tasks where owner_name = 'SYS' and name in ('AUTO_STATS_ADVISOR_TASK','INDIVIDUAL_STATS_ADVISOR_TASK'); 2 3 4 no rows selected
- چرا مشکل باید حل گردد:
شاید بعضی از دوستان بگویند که "این alert برای ما مشکلی ایجاد نمیکند" ولی باید دقت شود با افزایش داده ها در جداول، در صورت عدم gather stats این مورد بر روی performance پایگاه داده و ساخت sql execution plan تاثیر مخربی خواهد داشت.
- حل مشکل:
بسیار خوب با sysdba به root container متصل شوید و Task ها را با دستور زیر بسازید:
[oracle@oel7 ~]$ sqlplus / as sysdba SQL*Plus: Release 12.2.0.1.0 Production on Sun Jan 14 10:29:08 2018 Copyright (c) 1982, 2016, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> EXEC dbms_stats.init_package(); PL/SQL procedure successfully completed.
حالا دوباره query را اجرا میکنیم تا ببینیم Task ها ساخته شده اند یا نه:
SQL> select name, ctime, how_created from sys.wri$_adv_tasks where owner_name = 'SYS' and name in ('AUTO_STATS_ADVISOR_TASK','INDIVIDUAL_STATS_ADVISOR_TASK'); 2 3 NAME -------------------------------------------------------------------------------- CTIME HOW_CREATED --------- ------------------------------ AUTO_STATS_ADVISOR_TASK 14-JAN-18 CMD INDIVIDUAL_STATS_ADVISOR_TASK 14-JAN-18 CMD
دوستان عزیز امیدوارم مطلب کاربردی بوده باشد.
شاد و پیروز باشید.