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:
=============================
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