Friday 22 March 2013

THAY ĐỔI DATABASE_NAME VÀ ORACLE_SID

THÔNG TIN VÀ CÁC THỨC THAY ĐỔI DATABASE_NAME VÀ ORACLE_SID MÀ KHÔNG CẦN TẠO LẠI DATABASE

Mục đích:
Mô tả việc tìm thông tin và thay đổi "database_name" cho một database, hoặc "ORACLE_SID" cho một instance, mà không cần tạo mới lại database.

Phạm vi:
Cho những nhà quản trị (DBA) muốn tìm hay thay đổi db_name hay ORACLE_SID.

Thông tin về DB_NAME và ORACLE_SID hiện tại đang dùng:
+ Bạn query tại bảng sau:
V$DATABASE --> cho ta biết thông tin về DB_NAME
V$THREAD --> cho ta biết thông tin về ORACLE_SID

+ Câu lệnh SQL:
SQL> Select name from v$database;
SQL> Select instance from v$thread;

I. Cập nhật database với ORACLE_SID mới:
1. Bạn shutdown the instance
+ Database phải được tắt ở chế độ SHUTDOWN NORMAL hay SHUTDWON IMMEDIATE. Không được tắt database ở chế độ SHUTDOWN ABORT.

2. Lưu lại các database files: control, redo, data files để dự phòng.

3. Bạn cập nhật với ORACLE_SID mới tại các file sau: .bash_profile, .cshrc, .login, oratab, tnsnames.ora nếu có chứa thông tin ORACLE_SID này.
*Lưu ý: Trên môi trường linux thì bạn dùng lệnh "ls -al" để xem các file ẩn có tên file bắt đầu bằng dấu chấm "." , ví dụ ".bash_profile"
+ Các file .bash_profile, .cshrc, .login, oratab: chỉ có trên OS Linux, Unix..., vài nằm tại thư mục:
+ .bash_profile, .cshrc, .login: Thư mục của user Oracle (/home/oracle)
+ oratab: Có tại thư mục /etc
+ tnsnames.ora: Có tại $ORACLE_HOME/network/admin

4. Bạn tới thư mục "$ORACLE_HOME/dbs" và đổi tên các file sau:
+ init.ora (hoặc là dùng pfile để chỉ ra init file)
+ control files(s) nếu như bạn muốn thay đổi lại đường dẫn, thông số này nằm trong init.ora.
+ crdb.sql và crdb2.sql (dùng trong trường hợp tạo database)

5. Đổi tên các database files và redo log files (Option thôi) (theo hướng dẫn tại http://www.oravn.com/viewtopic.php?t=201)

6. Đổi biến môi trường ORACLE_SID cho giá trị mới.

7. Tại thư mục "$ORACLE_HOME/dbs", bạn tạo mới password file cho ORACLE_SID mới này (bạn đổi tên password file cũ thành mới thì ko được). Bạn chạy lệnh sau để tạo password file mới:
orapwd file=orapw password=?? entries=

8. Bạn mở lại database và kiểm tra lại xem mọi cái chạy ok chưa: Startup

9. Khi instance đã được bật lên rồi, các control files được cập nhật với ORACLE_SID mới.


II. Cập nhật database_name mới cho một database:
1. Bạn login vào database:(Nhớ trước khi login thì set ORACLE_SID=SID)
+ Với Oracle 7 --> Oracle8i:
% svrmgrl
SVRMGR> connect internal
+ Với Oracle9i trở lên:
% sqlplus /nolog
SQL> conn / as sysdba

2. Bạn gõ lệnh sau để thực thi việc checkpoint:
SQL> alter system switch logfile;

3. Bạn gõ tiếp lệnh:
SQL> alter database backup controlfile to trace resetlogs;

Lệnh này sẽ tạo ra một trace file chứa lệnh "Create controlfile" để tạo lại controlfile.

4. Tắt database và thoát ra khỏi SQL:
SQL> shutdown

SQL> exit

5. Bây giờ ta tới thư mục chứa trace file vừa mới được tạo trên bước 3. Thông thường thì file này nằm tại "$ORACLE_HOME/rdbms/log" hay thư mục "udump". Hay là bạn có thể xem thông tin "user_dump_dest" có chứa đường dẫn thư mục chứa file này.
Trace file sẽ có dạng "ora_NNNN.trc" với NNNN là số.(Chắc ăn bạn xem ngày tạo file trùng với lúc bạn thực hiện lệnh số 3.)

6. Bạn copy nội dung trong file này từ dòng chứa STARTUP NOMOUNT trở xuống đến hết trace file và paste nội dung này vào một file mới với tên "newctf.sql".

7. Bước kế tiếp là ta cập nhập nội dung file "newctf.sql":
+ Từ : CREATE CONTROLFILE REUSE DATABASE "olddbname" RESETLOGS ...
thành: CREATE CONTROLFILE set DATABASE "newdbname" RESETLOGS ...
(Thay đổi từ 'REUSE' thành 'SET' và từ 'olddbname' thành 'newdbname' ). Với lệnh trên cho phép ta ghi đè thông tin lên control file hiện tại.

+ Từ:
# Recovery is required if any of the datafiles are restored backups,
# or if the last shutdown was not normal or immediate.
RECOVER DATABASE USING BACKUP CONTROLFILE
thành:
# Recovery is required if any of the datafiles are restored backups,
# or if the last shutdown was not normal or immediate.
# RECOVER DATABASE USING BACKUP CONTROLFILE

(Chú ý: Đối với Oracle9i thì bạn thay ký tự '#' thành '--', vì trong Oracle9i không hiểu '#' là Rem)

và câu lệnh cuối cùng của file "newctf.sql" phải là:
ALTER DATABASE OPEN RESETLOGS

8. Lưu và thoát ra khỏi file "newctf.sql".

9. Thay đổi tên các control file hiện tại để sao lưu dự phòng và tránh bị ghi đè khi tạo control file mới hay gặp lỗi không tạo mới control file được.

10. Cập nhật nội dung file "init.ora" với db_name="newdb_name" (Riêng trên OS Unix, thì bạn thực hiện luôn lệnh "vi" và cập nhật file này, không cần thực hiện các bước 10.1, 10.2, 10.3 bên dưới)
10.1) Bạn cần xuất nội dung SPFILE sang PFILE (dạng ASCII text file):
SQL> create pfile='initDB01test.ora' from spfile;
File created.

File initDB01test.ora thì được tạo ra nằm tại thư mục $ORACLE_HOME/dbs

10.2) Lúc này bạn cập nhật thông tin tham số db_name="newdb_name" trong PFILE 'initDB01test.ora'

10.3) Tạo lại SPFILE từ PFILE 'initDB01test.ora':
SQL> create spfile='init.ora' from pfile='initDB01test.ora';
File created.

11. Bạn login lại vào Oracle database Server:
+ Với Oracle 7.x.x.x -> 8i:
% svrmgrl
SVRMGR> connect internal

+ Với Oracle9i/10g bạn dùng SQL*Plus:
% sqlplus "/ as sysdba"
Connected to an idle instance.

12. Chạy file script "newctf.sql"
SVRMGR> @newctf.sql

Script trên sẽ chạy startup nomount và tạo lại control file. Sau khi thực hiện ta sẽ thấy thông báo:
Control file created.
Database altered.
Lúc này database đã được mở và cập nhật thành công. Bạn tiếp bước 13.

Nếu, vào thời điểm này mà xuất hiện thông báo lỗi một file cần phục hồi (media recovery), do bởi database đã không được shutdow một cách bình thường trong bước số 4. Bạn có thể phục hồi databse bằng lệnh sau:

SVRMGRL> recover database using backup controlfile until cancel;
Log Applied
Media Recovery Complete

sau đó, bạn mở database lên:
SVRMGR> alter database open resetlogs;

13. Bạn cần đổi luôn tên global database:
SVRMGR> alter database rename global_name to . ;

14. Lúc này bạn kiểm tra lại mọi thứ & cho các ứng dụng kết nối với database name va SID mới xem đã tốt chưa. Nếu tốt rồi thì bạn đã thành công 

0 comments:

Post a Comment