[Oracle DB] Lỗi ORA-39014 ORA-39029 khi import dữ liệu bằng Datapump
"ORA-39014: One or more workers have prematurely exited.
ORA-39029: worker 2 with process name "DW00" prematurely terminated
Nếu bạn đang gặp thông báo này thì hi vọng đây là nơi kết thúc mọi vấn đề."
-- Trong công tác cắt chuyển hoặc nâng cấp hệ thống CNTT thì việc sử dụng công cụ Datapump để export dữ liệu từ DB phiên bản cũ và import vào DB mới có phiên bản cao hơn là một lựa chọn thường dùng. Vậy chúng ta hãy xem xét một trường hợp mà tôi từng gặp như sau:
- Export dữ liệu từ database 11g.
- Import dữ liệu vào database 19c ở hạ tầng mới.
- Trên hạ tầng mới có tài nguyên dư thừa, sử dụng tùy chọn PARALLEL để tăng số luồng xử lí, giảm thời gian tiêu tốn trong đêm cắt chuyển. Nếu thời gian import dữ liệu quá dài dẫn đến ăn vào giờ hành chính là trường hợp tối kị đối với hệ thống OLTP.
-- Để thực hiện tác vụ trên, hãy xem xét script import dữ liệu vào DB 19c như sau:
oracle:dbdump$ cat ./test_import.sh #!/bin/bash # Tạo biến môi trường để lưu thời gian hiện tại LOGFILE_NAME="imp_data_test_$(date +%Y%m%d%H%M%S).log" # Import schema vào Oracle 19.19.0.0 impdp test/xxxx@xxx.xxx.xxx.xxx:1521/xxxx \ DIRECTORY=TUANTN_DATAPUMP \ DUMPFILE=xxxx_all_20240714221247.dmp \ remap_schema=XXXX:TEST \ remap_tablespace=XXXX:TEST \ EXCLUDE=USER,TABLE_STATISTICS \ LOGFILE=$LOGFILE_NAME \ PARALLEL=24 # EXCLUDE=TABLE_STATISTICS,INDEX_STATISTICS,USER,STATISTICS \ # Xóa file nohup.out nếu có # rm ./nohup.out
-- Khi thực thi script trên, chúng ta va phải log lỗi. Đây tuy không phải là lỗi lớn nhưng nó lại khá khó chịu khi bất chấp việc bạn đã thử nghiệm import dữ liệu ở môi trường test, lỗi vẫn có thể xảy ra khi tiến hành trên môi trường Prod:
Import: Release 19.0.0.0.0 - Production on Sat Jul 20 21:22:55 2024 Version 19.19.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Master table "TEST"."SYS_IMPORT_FULL_01" successfully loaded/unloaded Starting "TEST"."SYS_IMPORT_FULL_01": test/********@xxx.xxx.xxx.xxx:1521/xxxx DIRECTORY=TUANTN_DATAPUMP DUMPFILE=xxxx_all_20240714221247.dmp remap_schema=XXXX:TEST remap_tablespace=XXXX:TEST EXCLUDE=USER,TABLE_STATISTICS LOGFILE=imp_data_test_20240720212255.log PARALLEL=24 Processing object type SCHEMA_EXPORT/SYSTEM_GRANT ORA-39014: One or more workers have prematurely exited. ORA-39029: worker 2 with process name "DW00" prematurely terminated Job "TEST"."SYS_IMPORT_FULL_01" stopped due to fatal error at Sat Jul 20 21:23:40 2024 elapsed 0 00:00:31
-- Đến đây, khi tìm kiếm thông tin về việc worker bị dừng, chúng ta thường sẽ nhận được nhưng câu trả lời chung chung như "Có thể do tài nguyên không đủ" và tất nhiên là không giải quyết được vấn đề. Mã lỗi trên còn có thể được link đến mã lỗi "ORA-00600 internal error code" mà đã là internal error thì lại phải có tài khoản Oracle support mới có thể tra cứu thêm thông tin. Vậy hãy phân tích một chút:
- Dữ liệu được export ra từ DB khá cũ (phiên bản 11g), trong bối cảnh những năm 2018 trở về trước thì chi phí SAN khá cao, dẫn đến việc nhiều DB được triển khai với mô hình Active-Standby (DataGuard).
- Dữ liệu được import vào DB mới hơn, tài nguyên cũng được nâng cấp để có thể chạy mô hình RAC tối ưu hơn.
-- Vậy việc xảy ra lỗi có thể đến từ việc ta chưa lường hết sự khác nhau giữa các mô hình DB, hãy thử chạy lại script với việc thêm tham số CLUSTER như sau:
oracle:dbdump$ cat ./test_import.sh #!/bin/bash # Tạo biến môi trường để lưu thời gian hiện tại LOGFILE_NAME="imp_data_test_$(date +%Y%m%d%H%M%S).log" # Import schema vào Oracle 19.19.0.0 impdp test/xxxx@xxx.xxx.xxx.xxx:1521/xxxx \ DIRECTORY=TUANTN_DATAPUMP \ DUMPFILE=xxxx_all_20240714221247.dmp \ remap_schema=XXXX:TEST \ remap_tablespace=XXXX:TEST \ EXCLUDE=USER,TABLE_STATISTICS \ LOGFILE=$LOGFILE_NAME \ CLUSTER=N \ PARALLEL=24 # EXCLUDE=TABLE_STATISTICS,INDEX_STATISTICS,USER,STATISTICS \ # Xóa file nohup.out nếu có # rm ./nohup.out
-- Tiến trình import đã có thể chạy bình thường với tham số PARALLEL:
Import: Release 19.0.0.0.0 - Production on Sat Jul 20 22:19:26 2024 Version 19.19.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Master table "TEST"."SYS_IMPORT_FULL_02" successfully loaded/unloaded Starting "TEST"."SYS_IMPORT_FULL_02": test/********@10.1.186.74:1521/vasdb DIRECTORY=TUANTN_DATAPUMP DUMPFILE=v2vasapi_all_20240714221247.dmp remap_schema=V2VASAPI:TEST remap_tablespace=VASAPI:TEST EXCLUDE=USER,TABLE_STATISTICS LOGFILE=imp_data_test_20240720221926.log CLUSTER=N PARALLEL=24 Processing object type SCHEMA_EXPORT/SYSTEM_GRANT Processing object type SCHEMA_EXPORT/ROLE_GRANT Processing object type SCHEMA_EXPORT/DEFAULT_ROLE Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/DB_LINK Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE Processing object type SCHEMA_EXPORT/TABLE/TABLE
--:


Nhận xét
Đăng nhận xét