Thứ Năm, 16 tháng 6, 2022

Tạo lại control file trong Oracle Database

Control file là gì?

Control file là file thông tin dạng nhị phân được sử dụng cho việc khởi tạo và vận hành database một cách hiệu quả.

Mỗi khi instance được MOUNT (gắn) với một Oracle database, các thông tin trong control file sẽ được đọc ra, từ đó xác định các data files và các online redo log files.

Control file được cập nhật liên tục vào database trong suốt quá trình sử dụng và nó luôn ở trạng thái sẵn sàng (available) mỗi khi database được OPEN (mở) hay được MOUNT (gắn) với instance.

Control file cung cấp các thông tin một cách đồng nhất trong database được sử dụng trong quá trình khôi phục (recovery).

Mỗi control file tại một thời điểm chỉ phục vụ cho một database. Khi đã có một database sử dụng control file thì các database khác sẽ không thể truy cập tới control file đó nữa.

Control file là một trong những tệp cốt lõi ở trung tâm của cơ sở dữ liệu Oracle. Mất hoặc hỏng Control file yêu cầu khôi phục cơ sở dữ liệu ở chế độ RESETLOGS.

Những điều cần xem xét trước khi tạo lại Controlfile

Control file rất quan trọng đối với cơ sở dữ liệu. Một số thông tin chỉ được lưu trữ trong Control file chứ không phải từ điển dữ liệu. Metadata gồm flashback log, block change tracking, bản backup RMAN và và vị trí datafile. Thường thì có sẵn các cách giải quyết hoặc giải pháp và Control file không cần phải tạo lại.

Nếu bạn thực sự phải tạo lại Control file hoặc khi được Oracle hướng dẫn, hãy xem xét những điều sau…

1. Inaccessible/Offlined Datafiles


Nếu tất cả các datafile không có trên đĩa ngay từ đầu, bạn sẽ không thể tạo lại Control file. Nếu các datafile nằm trên đĩa, hãy đảm bảo rằng không có datafile nào offlined:

select distinct(status) from v$datafile where status not in ('ONLINE','SYSTEM');

select name, ts#, online$, contents$ from ts$ where online$ =2;

Nếu không, khi Control file được tạo lại với resetlogs all, tất cả các datafile offline không thể được thêm vào cơ sở dữ liệu. Bạn có thể gặp các lỗi sau:

RMAN> sql 'alter database datafile 6 online';

 

sql statement: alter database datafile 6 online

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03009: failure of sql command on default channel at 07/29/2012 11:07:07

RMAN-11003: failure during parse/execution of SQL statement: alter database datafile 6 online

ORA-01190: control file or data file 6 is from before the last RESETLOGS

ORA-01110: data file 6: '/opt/app/oracle/oradata/ORA112/leng_ts.dbf'

2. Flashback database


Khi một Control file được tạo lại, tất cả thông tin flashback - normal restore point, guaranteed restore point và fashback database, sẽ bị TẮT, ngay cả khi sử dụng NORESETLOGS. Tất cả flashback log trên đĩa không thể được catalog vào Control file. Bạn sẽ gặp phải lỗi này nếu cố gắng catalog flashback logs:

File Name: /opt/app/oracle/fra/ORA112/flashback/o1_mf_85zttw61_.flb

  RMAN-07529: Reason: catalog is not supported for this file type

Bạn sẽ phải bật lại flashback database. Tất cả các flashback cũ sẽ không còn hữu ích nữa và phải được xóa thủ công khỏi đĩa.

3. Sử dụng vùng Flash Recovery Area


Khi Control file được tạo lại, chế độ xem v$flash_recovery_area_usage có thể không phản ánh mức sử dụng thực tế trên đĩa. Vì vậy, bạn có thể cần chạy lệnh này để liệt kê mọi thứ trong Control file.

RMAN> catalog recovery area;

4. Backup metadata


Nếu bạn không sử dụng RMAN recovery catalog, bạn sẽ cần phải lập danh mục (catalog) tất cả các phần sao lưu vào Control file. Hơn nữa, trước 9i, chúng ta không thể lập danh mục các phần sao lưu.

Control file rất quan trọng đối với quá trình sao lưu và khôi phục. Đúng là bạn có thể lập danh mục tất cả các phần sao lưu vào Control file, nhưng bạn phải có Control file để sử dụng ngay từ đầu. Nếu bạn đã mất toàn bộ hệ thống của mình và chỉ có các phần sao lưu để sử dụng, bạn phải có ít nhất một Control file để lập danh mục các phần sao lưu này. Hơn nữa, bạn không thể tạo lại Control file mà không có bất kỳ datafile nào trên đĩa.

Sao lưu Control file hiện tại

Ít nhất bạn nên sao lưu các Control file hiện tại trước khi tạo lại nó. Nếu ở chế độ open

RMAN> backup current controlfile;

SYS> alter database backup controlfile to '/tmp/control01.bk';

Nếu cơ sở dữ liệu đã tắt, trước tiên hãy sao lưu hệ điều hành. Ví dụ:

SYS@ORA112.SQL> show parameter control_files

 

NAME                     TYPE          VALUE

------------------------------------ -------------------- ------------------------------

control_files                 string          /opt/app/oracle/oradata/ORA112/control1.ctl, /opt/app/oracle/oradata/ORA112/control2.ctl


$ cp /opt/app/oracle/oradata/ORA112/control1.ctl /opt/app/oracle/oradata/ORA112/control1.ctl.old

$ cp /opt/app/oracle/oradata/ORA112/control2.ctl /opt/app/oracle/oradata/ORA112/control2.ctl.old

Lưu ý rằng bản sao lưu nhị phân khác với bản sao lưu ASCII! Điều này tạo ra một lệnh ASCII sẽ cho phép bạn tạo lại Control file. Nó thực sự KHÔNG phải là bản sao lưu của Control file hiện tại.

SQL> alter database backup controlfile to trace;

Tạo lại Control file

Bạn chỉ nên tạo lại Control file của mình trong các trường hợp sau:

·         Tất cả các bản sao hiện tại của Control file đã bị mất hoặc bị hỏng.

·         Bạn đang khôi phục bản sao lưu trong đó Control file bị hỏng hoặc bị thiếu.

·         Bạn cần thay đổi tham số cơ sở dữ liệu giới hạn cứng (hard limit) trong Control file.

·         Nếu bạn đang di chuyển cơ sở dữ liệu của mình sang một máy chủ khác và các datafile được đặt ở một vị trí khác.

·         Oracle Support khuyên bạn nên làm như vậy.


Tạo Controlfile mới từ cơ sở dữ liệu hiện có được mount hoặc mở.


Đầu tiên, bạn phải tạo một kết xuất ascii của Control file. Trong khi cơ sở dữ liệu được mount hoặc mở:

SQL> alter database backup controlfile to trace;

Một trace file sẽ được tạo trong thư mục user_dump_destination.

SQL> show parameter user_dump_dest 

 

NAME            TYPE         VALUE 

--------------  ------       ------------------------------------------------ 

user_dump_dest  string       /oracle/product/11.1.0/db_1/diag/rdbms/V11/trace

Sau khi đến thư mục, xác định trace file mới nhất theo ngày / giờ bằng cách ra lệnh “ls -ltr”.

$ cd /oracle/product/11.1.0/db_1/diag/rdbms/V11/trace

$ ls -ltr

Sau khi xác định được file, nó sẽ xuất hiện dưới dạng file theo dõi thông thường: /oracle/product/11.1.0/db_1/diag/rdbms/V11/trace/V11_ora_31225.trc

Sửa đổi trace file và sử dụng nó như một tập lệnh để tạo control file.

CREATE CONTROLFILE REUSE DATABASE "V11" NORESETLOGS ARCHIVELOG  

MAXLOGFILES 16  

MAXLOGMEMBERS 3  

MAXDATAFILES 100  

MAXINSTANCES 8  

MAXLOGHISTORY 292  

LOGFILE  

GROUP 1 '/oradata/V11/redo01.log' SIZE 50M,  

GROUP 2 '/oradata/V11/redo02.log' SIZE 50M,  

GROUP 3 '/oradata/V11/redo03.log' SIZE 50M  

DATAFILE  

'/oradata/V11/system01.dbf',  

'/oradata/V11/sysaux01.dbf',  

'/oradata/V11/undotbs01.dbf', 

'/oradata/V11/user01.dbf'  

CHARACTER SET AL32UTF8

;

Điều quan trọng là phải xóa mọi thứ phía trên “CREATE CONTROLFILE” và mọi thứ sau “CHARACTER SET”. Đảm bảo bạn bỏ dấu chấm phẩy “;”. Trong ví dụ trên, chúng ta đang chọn tùy chọn NORESETLOGS và chạy cơ sở dữ liệu ở chế độ archivelog. Sau khi lưu thành công script, bây giờ bạn có thể tạo lại Control file. Khi tắt cơ sở dữ liệu, hãy đảm bảo rằng bạn tắt máy với tùy chọn immediate.

SQL> shutdown immediate;

Bật cơ sở dữ liệu ở chế độ nômunt và chạy script vừa tạo

SQL> startup nomount;

SQL>@control.sql

Lưu ý: Sau khi tạo lại Control file, hãy đảm bảo bạn thêm tệp TEMP hiện có. Ví dụ:

sql> alter tablespace temp_ts add tempfile '/oradata/V11/temp01.dbf' reuse;

Khi Control file được tạo thành công, cơ sở dữ liệu sẽ tự động được mount. Nếu bạn đã mở cơ sở dữ liệu với resetlog, điều quan trọng là phải sao lưu càng sớm càng tốt.

Tạo một Control file mới từ cơ sở dữ liệu không thể mount


Trong một số trường hợp hiếm hoi mà bạn không có Control file để:

1. Khôi phục Control file từ bản sao lưu

2. hoặc có một script từ “backup controlfile to trace script” được tạo trước đó, tức là, khi Control file của bạn tốt. Trong nhiều trường hợp, bạn có thể không tạo được script ngay bây giờ nếu bạn gặp bất kỳ lỗi nào và không có bất kỳ bản sao lưu nào của Control file, thì cách  duy nhất là phải xác định danh sách file thủ công được đề cập bên dưới.

3. hoặc bạn phải tạo một tập lệnh ngay từ đầu, bằng cách liệt kê thủ công tất cả các file, điều này rất rủi ro nếu bạn bỏ sót bất kỳ file nào, vì vậy hãy liệt kê cẩn thận tất cả các file.

SQL> CREATE CONTROLFILE REUSE DATABASE "DBNAME" NORESETLOGS ARCHIVELOG;

Thực hiện theo danh sách định dạng:

- Vị trí của các redo logs

- Vị trí của các datafiles

- Chỉ định bộ ký tự.

Khi bạn đã liệt kê tất cả các tệp một cách chính xác, bạn đã sẵn sàng để tạo lại Control file của mình:

SQL> startup nomount; 

SQL>@control.sql

=============================

* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.

* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888

* Chi tiết tham khảo:

https://bit.ly/oaz_w

=============================

KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:

📧 Mail: binhoracle@gmail.com

☎️ Mobile: 0902912888

⚡️ Skype: tranbinh48ca

👨 Facebook: https://www.facebook.com/BinhOracleMaster

👨 Inbox Messenger: https://m.me/101036604657441 (profile)

👨 Fanpage: https://www.facebook.com/tranvanbinh.vn

👨 Inbox Fanpage: https://m.me/tranvanbinh.vn

👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam

👨 Website: https://www.tranvanbinh.vn

👨 Blogger: https://tranvanbinhmaster.blogspot.com

🎬 Youtube: http://bit.ly/ytb_binhoraclemaster

👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi

👨 Linkin: https://www.linkedin.com/in/binhoracle

👨 Twitter: https://twitter.com/binhoracle

👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

 

=============================

học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty

 

 

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master