2023年11月2日 星期四

Impdp halted due to a fatal error , 出現錯誤

 

impdp 出現  error , process 直接跳掉, 且系統log也沒有出現錯誤


. . exported "DBA"."DBA_RECORD_S1":"SYS_P495"      18.14 KB       3 rows

. . exported "DBA"."DBA_RECORD_S1":"SYS_P496"      30.74 KB      81 rows

. . exported "DBA"."DBA_RECORD_S1":"SYS_P497"     16.91 KB       2 rows

. . exported "DBA"."DBA_RECORD_S1":"SYS_P498"      29.72 KB      73 rows


The job "SYSTEM". "SYS_IMPORT_SCHEMA_01" was halted due to a fatal error at 11:52:41



這次的錯誤並沒有明顯的錯誤訊息, impdp 直接被中斷中止, 先查一下 系統跟alert.log 並沒有相關錯誤, 記憶體跟空間都足夠


其實可以去看 trc 看看 process 錯誤 是什麼, 但 trc, log  檔案數量太多 , 無法一一去查看, 時間也不夠


看impdp log 是直接斷在 imp table 中間, 就直接先判斷 是某張table 出現問題導致無法匯入, 並考慮 EXCLUDE 參數。


要是你Table 數量過多無法直接排除的話, 可以先參考 expdp log , 因為 expdp impdp 匯出導入都是按照 table size 順序處理, 就可以知道 impdp 是停在哪一個table


impdp system/ATTIdYPtyMt77uLY DIRECTORY=DBBACKUP \

DUMPFILE=expdp_dba01.dmp LOGFILE=expdp_dba01.log \

EXCLUDE=TABLE:\"LIKE \'DBA_TEST_OTHER\%\'\"



排除後就可正常導入












2023年5月25日 星期四

oracle 19c 清除 SYS.WRI$_ADV_OBJECTS


因為在12.2中,引入了新的特性:optimizer statistics advisor。

優化器統計信息顧問每天都會在維護窗口運行,auto_stats_advisor_task多次運行,

會消耗大量sysaux表空間,要是你有大量 partition table 這個會更消耗空間。


WRI$_ADV_OBJECTS為 AUTO_STATS_ADVISOR_TASK 或INDIVIDUAL_STATS_ADVISOR_TASK 保留的大量舊記錄會導致佔據大量 SYSAUX 空間。



AUTO_STATS_ADVISOR_TASK 用於自動統計顧問任務

INDIVIDUAL_STATS_ADVISOR_TASK 用於手動統計顧問任務



可以透過 oracle 自動排成去清掉舊資料,這邊可以看到預設的舊資料天數是多少


select TASK_NAME,parameter_name, parameter_value FROM DBA_ADVISOR_PARAMETERS WHERE task_name='AUTO_STATS_ADVISOR_TASK' and PARAMETER_NAME='EXECUTION_DAYS_TO_EXPIRE';


把舊資料修改為10天

EXEC DBMS_ADVISOR.SET_TASK_PARAMETER(task_name=> 'AUTO_STATS_ADVISOR_TASK', parameter=> 'EXECUTION_DAYS_TO_EXPIRE', value => 10);


自動刪除: 正常情況下AUTO_STATS_ADVISOR_TASK 的 EXECUTION_DAYS_TO_EXPIRE 參數設置為 30(預設情況下)。因此,超過 30 天的舊記錄被標記為過期。

手動刪除: 可以使用以下命令手動清除過期的記錄,而不是依賴自動。這將清除超過 30 天保留期的舊記錄。


手動刪除指令:

exec prvt_advisor.delete_expired_tasks;


要是筆數已經太多會產生過多的undo , 可以直接truncate 

*參考SYSAUX Tablespace Grows Rapidly After Upgrading Database to 12.2.0.1 or Above Due To Statistics Advisor (Doc ID 2305512.1)



看一下 等等要刪除的筆數

SELECT TASK_NAME, COUNT(*) CNT FROM DBA_ADVISOR_OBJECTS GROUP BY TASK_NAME ORDER BY CNT DESC;


把要保留的資料先備分

CREATE TABLE WRI$_ADV_OBJECTS_NEW AS  SELECT * FROM WRI$_ADV_OBJECTS WHERE TASK_ID !=(SELECT DISTINCT ID FROM WRI$_ADV_TASKS WHERE NAME='AUTO_STATS_ADVISOR_TASK'); SQL> SELECT COUNT(*) FROM WRI$_ADV_OBJECTS_NEW;

 

刪除

TRUNCATE TABLE WRI$_ADV_OBJECTS;

 

還原 

INSERT INTO WRI$_ADV_OBJECTS (ID,

                              TYPE,

                              TASK_ID,

                              EXEC_NAME,

                              ATTR1,

                              ATTR2,

                              ATTR3,

                              ATTR4,

                              ATTR5,

                              ATTR6,

                              ATTR7,

                              ATTR8,

                              ATTR9,

                              ATTR10,

                              ATTR11,

                              ATTR12,

                              ATTR13,

                              ATTR14,

                              ATTR15,

                              ATTR16,

                              ATTR17,

                              ATTR18,

                              ATTR19,

                              ATTR20,

                              OTHER,

                              SPARE_N1,

                              SPARE_N2,

                              SPARE_N3,

                              SPARE_N4,

                              SPARE_C1,

                              SPARE_C2,

                              SPARE_C3,

                              SPARE_C4)

   SELECT ID,

          TYPE,

          TASK_ID,

          EXEC_NAME,

          ATTR1,

          ATTR2,

          ATTR3,

          ATTR4,

          ATTR5,

          ATTR6,

          ATTR7,

          ATTR8,

          ATTR9,

          ATTR10,

          ATTR11,

          ATTR12,

          ATTR13,

          ATTR14,

          ATTR15,

          ATTR16,

          ATTR17,

          ATTR18,

          ATTR19,

          ATTR20,

          OTHER,

          SPARE_N1,

          SPARE_N2,

          SPARE_N3,

          SPARE_N4,

          SPARE_C1,

          SPARE_C2,

          SPARE_C3,

          SPARE_C4

     FROM WRI$_ADV_OBJECTS_NEW;

commit; 

 

index rebuild 

 ALTER INDEX WRI$_ADV_OBJECTS_IDX_01 REBUILD online ;

 ALTER INDEX WRI$_ADV_OBJECTS_PK REBUILD  online ;