Clone Database

Các bài viết, hướng dẫn, các bài dịch thuật, sưu tầm,... liên quan đến học tập nghiên cứu DB, OS,...
Post Thu Jul 26, 2007 9:24 pm
User avatar

nhsang

Administrator
Administrator
Posts: 3488
Joined: Mon Jul 16, 2007 1:38 pm
Location: Sài Gòn

Clone Database

Giới thiệu

Clone DB là một trong những công việc mà DBA phải làm thường xuyên.
Việc clone DB, giúp chúng ta có được 1 một "bản photocopy" của CSDL đang chạy, cho những mục đích như: Developper, Test, chuyễn DB sang máy khác,...

Với cách làm này, chúng ta cũng có thể áp dụng để khôi phục lại DB, khi chỉ chỉ còn bộ Datafiles!



Mục tiêu của bài

Trong phần bài này, chúng ta sẽ tiến hành Clone DB cùng những yêu cầu sau:
- Đỗi tên DB từ EDU sang ORAVN.
- Đỗi đường dẫn các Datafile từ d:\Oracle\data\edu sang c:\Oracle\data\oravn

Chúng ta sẽ tiến hành các bước clone bằng lệnh, với cách này chúng ta có thể tiến hành được trên hầu hết các phiền bản Oracle Database.
Trong bày này sẽ sử dụng Oracle9.2 để làm ví dụ minh họa.


Các bước thực hiện

1. Trên CSDL gốc: EDU

Đầu tiên chúng ta vào EDU đang chạy với quyền SYS

Code: Select all
D:\>set oracle_sid=edu

D:\>sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on Thu Jul 26 14:05:19 2007

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

SQL>


-Tạo pfile từ spfile hiện tại:

Code: Select all
SQL> create pfile='d:\pfileedu.ora' from spfile ;
File created.

SQL>


-Tạo bản backup dạng text của control_file
Sau khi tạo xong ta có 1 file dump nằm trong thư mục user_dump_dest. Lưu ý thư mục này có nhiều files, file vừa tạo là file mới nhất.

Code: Select all
SQL> show parameter user_dump_dest ;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                       string      d:\oracle\admin\edu\udump
SQL> alter database backup controlfile to trace ;

Database altered.

SQL>


Trong ví dụ này tôi có được file: D:\oracle\admin\edu\udump\edu_ora_824.trc

- Xem đường dẫn của của tất cả các Datafile hiện có trong Database;

Code: Select all
SQL> SELECT NAME FROM v$datafile ;

NAME
-----------------------------------------
D:\ORACLE\ORADATA\EDU\SYSTEM01.DBF
D:\ORACLE\ORADATA\EDU\UNDOTBS01.DBF
D:\ORACLE\ORADATA\EDU\INDX01.DBF
D:\ORACLE\ORADATA\EDU\TOOLS01.DBF
D:\ORACLE\ORADATA\EDU\USERS01.DBF
D:\ORACLE\ORADATA\EDU\OEM_REPOSITORY.DBF

6 rows selected.

SQL>


-Tiếp theo, chúng ta shutdown database và copy files sang máy mới.

Các file chúng ta sẽ copy qua máy mới bao gồm:

+6 datafiles trên, bỏ vào C:\ORACLE\ORADATA\oravn\

+d:\pfileedu.ora, bỏ vào c:\oracle\ora92\database\

+D:\oracle\admin\edu\udump\edu_ora_824.trc, bỏ vào C:\ORACLE\ORADATA\oravn\

+Password file: D:\oracle\ora92\database\PWDedu.ora, bỏ vào c:\oracle\ora92\database

Nếu không copy password file, khi qua DB mới phải dùng lệnh orapwd để tạo lại.

2. Trên máy đích: ORAVN

- Đầu tiên mở pfile.ora: (nếu bạn dùng notepad mà các tham số không chịu xuống dòng, thì dùng notepad2 trong mục download)

+sửa tất cả các tên từ EDU sang ORAVN
+sửa tất cả các đường dẫn từ d:\ sang c:\
+kiểm tra tất cả những đường dẫn đến các thư mục trên máy, nếu thư mục nào chưa có trên máy thì tạo bổ sung.

Đây là file sau khi sửa xong:

Code: Select all
*.aq_tm_processes=1
*.background_dump_dest='c:\oracle\admin\oravn\bdump'
*.compatible='9.2.0.0.0'
*.control_files='c:\oracle\oradata\oravn\control01.ctl','c:\oracle\oradata\oravn\control02.ctl','c:\oracle\oradata\oravn\control03.ctl'
*.core_dump_dest='c:\oracle\admin\oravn\cdump'
*.db_block_size=8192
*.db_cache_advice='ON'
*.db_cache_size=25165824
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='oravn'
*.dispatchers='(protocol=TCP)(disp=3)(con=10)'
*.fast_start_mttr_target=300
*.hash_join_enabled=TRUE
*.instance_name='oravn'
*.java_pool_size=0
*.job_queue_processes=10
*.large_pool_size=8388608
*.log_archive_dest='c:\oracle\ora92\database\archive'
*.log_archive_start=TRUE
*.open_cursors=300
*.pga_aggregate_target=25165824
*.processes=150
*.query_rewrite_enabled='FALSE'
*.remote_login_passwordfile='EXCLUSIVE'
*.service_names='oravn'
*.shared_pool_size=50331648
*.sort_area_size=524288
*.star_transformation_enabled='FALSE'
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='c:\oracle\admin\oravn\udump'


- Chuẩn bị script để tạo lại control file:
Mở file dump của control file C:\ORACLE\ORADATA\oravn\edu_ora_824.trc
dò từ cuối file trở lên, copy dòng lệnh tạo controlfile đầu tiên mà bạn gặp.

Code: Select all
CREATE CONTROLFILE REUSE DATABASE "EDU" RESETLOGS  ARCHIVELOG
--  SET STANDBY TO MAXIMIZE PERFORMANCE
    MAXLOGFILES 5
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 226
LOGFILE
  GROUP 1 'D:\ORACLE\ORADATA\EDU\REDO01.LOG'  SIZE 20M,
  GROUP 2 'D:\ORACLE\ORADATA\EDU\REDO02.LOG'  SIZE 20M,
  GROUP 3 'D:\ORACLE\ORADATA\EDU\REDO03.LOG'  SIZE 20M
-- STANDBY LOGFILE
DATAFILE
  'D:\ORACLE\ORADATA\EDU\SYSTEM01.DBF',
  'D:\ORACLE\ORADATA\EDU\UNDOTBS01.DBF',
  'D:\ORACLE\ORADATA\EDU\INDX01.DBF',
  'D:\ORACLE\ORADATA\EDU\TOOLS01.DBF',
  'D:\ORACLE\ORADATA\EDU\USERS01.DBF',
  'D:\ORACLE\ORADATA\EDU\OEM_REPOSITORY.DBF'
CHARACTER SET WE8MSWIN1252
;


Chúng sẽ sửa câu lệnh trên lại:
+ thay REUSE DATABASE "EDU" = SET DATABASE "ORAVN"
+ đổi tất cả đường dẫn sang ổ C:\

Kết quả chúng ta có được:

Code: Select all
CREATE CONTROLFILE SET DATABASE "ORAVN" RESETLOGS  ARCHIVELOG
--  SET STANDBY TO MAXIMIZE PERFORMANCE
    MAXLOGFILES 5
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 226
LOGFILE
  GROUP 1 'C:\ORACLE\ORADATA\ORAVN\REDO01.LOG'  SIZE 20M,
  GROUP 2 'C:\ORACLE\ORADATA\ORAVN\REDO02.LOG'  SIZE 20M,
  GROUP 3 'C:\ORACLE\ORADATA\ORAVN\REDO03.LOG'  SIZE 20M
-- STANDBY LOGFILE
DATAFILE
  'C:\ORACLE\ORADATA\ORAVN\SYSTEM01.DBF',
  'C:\ORACLE\ORADATA\ORAVN\UNDOTBS01.DBF',
  'C:\ORACLE\ORADATA\ORAVN\INDX01.DBF',
  'C:\ORACLE\ORADATA\ORAVN\TOOLS01.DBF',
  'C:\ORACLE\ORADATA\ORAVN\USERS01.DBF',
  'C:\ORACLE\ORADATA\ORAVN\OEM_REPOSITORY.DBF'
CHARACTER SET WE8MSWIN1252
;



- Tạo SID: mở cửa sổ command line

Code: Select all
C:\>oradim -new -sid oravn


- Khởi động DB ở nomount mode
- Tạo lại control file bằng câu lệnh đã sửa ở trên

Code: Select all
C:\>sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on Thu Jul 26 20:36:45 2007
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to an idle instance.

SQL> startup pfile='C:\oracle\ora92\database\pfileedu.ora' nomount ;
ORACLE instance started.
Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL>
SQL> CREATE CONTROLFILE SET DATABASE "ORAVN" RESETLOGS  ARCHIVELO
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\ORAVN\REDO01.LOG'  SIZE 20M,
10    GROUP 2 'C:\ORACLE\ORADATA\ORAVN\REDO02.LOG'  SIZE 20M,
11    GROUP 3 'C:\ORACLE\ORADATA\ORAVN\REDO03.LOG'  SIZE 20M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\ORAVN\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\ORAVN\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\ORAVN\INDX01.DBF',
17    'C:\ORACLE\ORADATA\ORAVN\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\ORAVN\USERS01.DBF',
19    'C:\ORACLE\ORADATA\ORAVN\OEM_REPOSITORY.DBF'
20  CHARACTER SET WE8MSWIN1252
21  ;
Control file created.
SQL>


-Open Database: do chúng ta tạo lại controlfile, nên phải Open với tham số resetlogs !

Code: Select all
SQL> alter database open resetlogs ;
Database altered.
SQL>


-Tạo lại Tempfile cho Temporary Tablespace:

Code: Select all
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'c:\ORACLE\ORADATA\oravn\TEMP11.DBF' size 10M ;

Tablespace altered.
SQL>


-Tạo Spfile cho các lần khởi động sau, hoàn thành công việc Clone DB.

Code: Select all
SQL> create spfile from pfile='C:\oracle\ora92\database\pfileedu.ora' ;
File created.

SQL> shutdown;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup ;
ORACLE instance started.
Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.

SQL> select name from v$database ;
NAME
---------
ORAVN

SQL>


Như vậy, chúng ta đã tạo lại được DB tên ORAVN trên máy mới từ những Datafile của EDU trên máy củ!

Chúc các bạn thành công.

Hoàng Sang/26-07-2007



Các thảo luận có liên quan:
1. khôi phục database sang 1 host khác có bản backup=rman
2. How to Migrate Database from Windows to Linux ?




Last edited by nhsang on Thu Sep 06, 2007 6:02 pm, edited 1 time in total.
Chán làm SYSTEM DBA, muốn code PL/SQL, ETL,... ai có jobs hay giới thiệu tui ! => nhsang@oravn.com


Post Mon Aug 13, 2007 2:11 pm
WELcome to ORAVN!!

buinhui

Thành viên ORAVN
Thành viên ORAVN
Posts: 3
Joined: Mon Jul 16, 2007 10:52 am

Hình như chỉ làm được trên ver 9.x?????






Post Mon Aug 20, 2007 10:31 am
WELcome to ORAVN!!

orageginer

PL/SQL
PL/SQL
Posts: 12
Joined: Mon Aug 20, 2007 10:16 am

Clone trên bản Oracle 10.X thì như thế nào?

Trước tiên mình cảm ơn BQT và Admin đã đăng bài bổ ích này.
Nhưng vấn đề mình gặp phải là mình đang sử dụng bản Oracle 10.X. Vậy có cách nào để Cloning Database giống như bản 9.X như trên không. Rất mong được BQT, Admin cũng như các bạn trên forum giúp đỡ và chia sẻ. Xin cảm ơn.






Post Mon Aug 20, 2007 10:54 am
User avatar

nhsang

Administrator
Administrator
Posts: 3488
Joined: Mon Jul 16, 2007 1:38 pm
Location: Sài Gòn

Chưa kiểm tra trên 10g, sẽ kiển tra và post lại phiên bản trên 10g sau. :D




Chán làm SYSTEM DBA, muốn code PL/SQL, ETL,... ai có jobs hay giới thiệu tui ! => nhsang@oravn.com


Post Mon Aug 20, 2007 12:46 pm
User avatar

nhsang

Administrator
Administrator
Posts: 3488
Joined: Mon Jul 16, 2007 1:38 pm
Location: Sài Gòn

Chào các bạn,

Đã kiểm tra lại trên Oracle 10g (r2), mọi việc diễn ra suôn sẻ như trên 9i.
Lưu ý là chúng ta cũng có thể lợi dụng chức năng tạo/quản lý Templete của DBCA trên Oracle 10g để làm Clone!!




Chán làm SYSTEM DBA, muốn code PL/SQL, ETL,... ai có jobs hay giới thiệu tui ! => nhsang@oravn.com


Post Mon Aug 20, 2007 1:17 pm
WELcome to ORAVN!!

orageginer

PL/SQL
PL/SQL
Posts: 12
Joined: Mon Aug 20, 2007 10:16 am

Clone trên bản Oracle 10.X gặp lỗi Compatible

Hi Admin.
Mình clone trên bản 10.1 và 10.2 đều gặp lỗi "... compatible not supported.."

Image

Rất mong được giúp đỡ, xin cảm ơn






Post Mon Aug 20, 2007 1:49 pm
User avatar

nhsang

Administrator
Administrator
Posts: 3488
Joined: Mon Jul 16, 2007 1:38 pm
Location: Sài Gòn

Thật ra cái hướng dẫn của mình chỉ dành cho các bạn đã biết chút ít về Oracle, không phải cho các bạn mới nhập môn ;)

Thứ nhất, theo như cái báo lỗi trên, thì thông tin trong pfile của bạn không phù hợp, bạn xem lại tham số compatible trong đó.
vd, tham số cho bản 10.2 là compatible='10.2.0.1.0'

Thứ hai, câu lệnh đặt biến môi trường: trước và sau dấu = không được có khoảng trắng!!

set ORACLE_SID=EDU

Thử ba, Oracle software phải cùng version trên cả 2 máy.
vd, trên máy gốc Oracle 9.2, thì khi clone sang máy thứ 2 cũng phải là Oracle 9.2.

Chúc bạn thành công.




Chán làm SYSTEM DBA, muốn code PL/SQL, ETL,... ai có jobs hay giới thiệu tui ! => nhsang@oravn.com


Post Tue Aug 21, 2007 9:00 pm
WELcome to ORAVN!!

orageginer

PL/SQL
PL/SQL
Posts: 12
Joined: Mon Aug 20, 2007 10:16 am

Thanks Admin, Have a good night! :B :B :B :B :B






Post Fri Aug 24, 2007 9:26 am
WELcome to ORAVN!!

nguyentrinhthu

Thành viên ORAVN
Thành viên ORAVN
Posts: 3
Joined: Fri Aug 24, 2007 9:20 am

Bạn có cách nào để chuyển data Ora từ máy lunix vào máy Windown không có thì chỉ cho mình với! Cám ơn trước






Post Fri Aug 24, 2007 1:40 pm
User avatar

nhsang

Administrator
Administrator
Posts: 3488
Joined: Mon Jul 16, 2007 1:38 pm
Location: Sài Gòn

Tổ chức file trên các dòng họ OS khác nhau cũng khác nhau, vì vậy yêu cầu của bạn là không thực hiện được :D

Trên Oracle >=10g cho phép chuyễn tablespace giữa các OS có codepage khác nhau, nhưng phải conver tới lui rất khổ!




Chán làm SYSTEM DBA, muốn code PL/SQL, ETL,... ai có jobs hay giới thiệu tui ! => nhsang@oravn.com


Post Fri Aug 24, 2007 5:23 pm
User avatar

duc.le

PL/SQL
PL/SQL
Posts: 47
Joined: Mon Aug 06, 2007 3:12 pm
Location: Ha Noi

@orageginer: Nếu chuyển db giữa các hệ điều hành thì tốt nhất là dùng imp/exp. Bạn có nhu cầu chuyển từ Linux sang Ora, như vậy có thể tạm suy luận là db của bạn không quá lớn hay quá phức tạp khi migrate bằng phương pháp này.






Post Sat Aug 25, 2007 5:42 am
WELcome to ORAVN!!

knguyen8csu

Thành viên ORAVN
Thành viên ORAVN
Posts: 8
Joined: Sat Aug 25, 2007 5:22 am

Database Cloning

Oracle 10gR2 (cho cả 10.2.0.3.0) cloning cũng tương tự như 9i. Vì tôi
chưa quen thuộc với cách gõ dấu và đóng khung của ORAVN nên nếu ai
cần thì cho biết, tôi sẽ gởi thí dụ mã (sample script). Dùng RMAN rất đơn
giản.






Post Sat Aug 25, 2007 1:42 pm
User avatar

trantuananh24hg

Moderator
Moderator
Posts: 2078
Joined: Tue Jul 17, 2007 10:55 am
Location: Ha Noi

@knguyen8csu: Chào mừng bạn!

Cách đóng khung rất đơn giản. Tôi lấy ví dụ: Nếu muốn thêm khung code vào câu lệnh:

SQL> Show parameter db_name

'['code']'
SQL> Show parameter db_name
'['code']'

Bạn bỏ dấu " ' " đi khi thêm code vào, vì nếu gõ chuẩn nó sẽ hiện lên khung ngay!

P/S: Clone DB là một phương án cực kỳ hữu hiệu, đặc biệt đối với DB Production. Đôi khi ta không thể tự tay tạo dựng DB Primary ngay từ đầu, mà ta phải làm với DB sẵn có.

Tuy nhiên anh S và mọi người cho em hỏi 1 điều: Làm sao để có thể transfer đồng thời - tức là khi DB chính có các action trên đó, thì DB Clone cũng nhận đồng thời các action đó??






Post Mon Aug 27, 2007 6:00 am
WELcome to ORAVN!!

knguyen8csu

Thành viên ORAVN
Thành viên ORAVN
Posts: 8
Joined: Sat Aug 25, 2007 5:22 am

trantuananh24hg: Cám ơn rất nhiều. Sẽ dùng thử cho quen.






Post Mon Aug 27, 2007 6:32 am
User avatar

nhsang

Administrator
Administrator
Posts: 3488
Joined: Mon Jul 16, 2007 1:38 pm
Location: Sài Gòn

knguyen8csu wrote:Oracle 10gR2 (cho cả 10.2.0.3.0) cloning cũng tương tự như 9i. ....... Dùng RMAN rất đơn giản.


Chúng ta thực hiện bằng tay từng bước vì nhiều lý do, chẳng hạn như:
-Để hiểu và kiểm soát được các bước thực hiện. Khi đã hiểu cách làm thì việc làm bằng tay hay chạy sử dụng sript có sẳn không quang trọng.
-Không phải để clone, mà để dựng lại DB khi chỉ còn bộ DB file.
...

trantuananh24hg wrote:@knguyen8csu: Chào mừng bạn!
Tuy nhiên anh S và mọi người cho em hỏi 1 điều: Làm sao để có thể transfer đồng thời - tức là khi DB chính có các action trên đó, thì DB Clone cũng nhận đồng thời các action đó??


Chưa hiểu lắm, action gì ken cho vd thử? Khi clone thì cái nào trong Data Dictionary sẽ được mang theo vì nó đi chung Data file.




Chán làm SYSTEM DBA, muốn code PL/SQL, ETL,... ai có jobs hay giới thiệu tui ! => nhsang@oravn.com


Next

Return to Bài viết từ ORAVN

Who is online

Users browsing this forum: No registered users and 3 guests