使用手工方法Clone異名資料庫實驗

來源:互聯網
上載者:User

搭建資料庫Clone對象是我們經常遇到的日常營運需求。在實際開發測試過程中,經常需要快速拷貝一份包含業務資料的資料庫環境。之前,我們已經介紹過如果使用RMAN Duplicate功能進行相關操作。本篇一起來討論如何使用傳統的SQL Plus工具進行建立複製資料庫。
 

推薦閱讀:

RMAN 配置歸檔日誌刪除策略

Oracle基礎教程之通過RMAN複製資料庫

RMAN備份策略制定參考內容

RMAN備份學習筆記

OracleDatabase Backup加密 RMAN加密

 

1、環境介紹和實驗目標

我們選擇Oracle 11gR2進行測試,運行作業系統為Linux 5.3。

SQL> select * from v$version;

 

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

PL/SQL Release 11.2.0.3.0 - Production

CORE 11.2.0.3.0 Production

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 - Production

 

資料庫執行個體名為ora11g,相關環境變數如下:

 

[oracle@SimpleLinux ~]$ env | grep ORA

ORACLE_SID=ora11g

ORACLE_BASE=/u01/app

ORACLE_HOME=/u01/app/oracle

 

資料庫參數檔案、控制檔案、資料檔案均遵守OFA規範,檔案名稱策略為OMF。

實驗目標是建立資料庫ora11cl,內容和ora11g完全相同(clone)。但是資料庫名稱要求不同。由於環境原因,筆者採用相同host進行檔案複製,如果是不同host複製資料庫,操作完全相同。注意:異地複製資料庫,最好Oracle軟體版本或者補丁完全相同。這樣做可以防止由於版本原因造成的異常。
 
 

2、原理分析和準備

Oracle資料庫運行三大檔案:資料檔案、控制檔案和記錄檔(online+archived)。需要進行資料庫複寫要將實現:參數檔案啟動一個全新的執行個體,採用一個新的執行個體名;控制檔案重建並且識別日誌和資料檔案;如果不完全關閉情況下,還要考慮歸檔日誌的應用補全。
 
一般情況下,如果是完全關閉資料庫,我們是可以避免歸檔日誌apply過程的。使用pfile可以實現新資料庫執行個體的建立。在進入nomount之後,可以嘗試重建立立control file,來修改置換檔案頭的各種資訊。
 
確定當前控制檔案目錄:

SQL> select name from v$controlfile;

NAME

--------------------------------------------------------------------------------
 
/u01/app/oradata/ORA11G/controlfile/o1_mf_92t72zkf_.ctl

/u01/app/fast_recovery_area/ORA11G/controlfile/o1_mf_92t72zyj_.ctl

 

如果新資料庫依然遵守OFA策略,對應的ORA11CL目錄需要建立,包括資料目錄和日誌目錄。準備cp命令指令碼。

 

 

SQL> select 'cp '||file_name||' '||replace(file_name,'ORA11G','ORA11CL') from dba_data_files;
 
cp /u01/app/oradata/ORA11G/datafile/o1_mf_users_92t6zl83_.dbf /u01/app/oradata/ORA11CL/datafile/o1_mf_users_92t6zl83_.dbf
 
cp /u01/app/oradata/ORA11G/datafile/o1_mf_undotbs1_92t6zl6d_.dbf /u01/app/oradata/ORA11CL/datafile/o1_mf_undotbs1_92t6zl6d_.dbf
 
cp /u01/app/oradata/ORA11G/datafile/o1_mf_sysaux_92t6zl5k_.dbf /u01/app/oradata/ORA11CL/datafile/o1_mf_sysaux_92t6zl5k_.dbf
 
cp /u01/app/oradata/ORA11G/datafile/o1_mf_system_92t6zl2m_.dbf /u01/app/oradata/ORA11CL/datafile/o1_mf_system_92t6zl2m_.dbf
 
cp /u01/app/oradata/ORA11G/datafile/o1_mf_example_92t74b1f_.dbf /u01/app/oradata/ORA11CL/datafile/o1_mf_example_92t74b1f_.dbf
 
cp /u01/app/oradata/ORA11G/datafile/o1_mf_trcatbl_96mlzz0j_.dbf /u01/app/oradata/ORA11CL/datafile/o1_mf_trcatbl_96mlzz0j_.dbf
 
cp /u01/app/oradata/ORA11G/datafile/o1_mf_testtbl_9j2sxn9r_.dbf /u01/app/oradata/ORA11CL/datafile/o1_mf_testtbl_9j2sxn9r_.dbf
 
cp /u01/app/oradata/ORA11G/datafile/o1_mf_awp_9khloyod_.dbf /u01/app/oradata/ORA11CLO/datafile/o1_mf_awp_9khloyod_.dbf
 
 

8 rows selected

 

控制檔案dump備份有很多方法,因為本次實驗希望使用Create control file的策略,所以備份到平面flat text檔案。

 

SQL> set heading on;

SQL> select value from v$diag_info where name='Default Trace File';

VALUE

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

/u01/app/diag/rdbms/ora11g/ora11g/trace/ora11g_ora_3577.trc

 

SQL> alter database backup controlfile to trace;

Database altered

 

開啟trace檔案,定位了指令碼位置,選擇resetlogs模式建立。

 

 

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "ORA11G" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 1248

LOGFILE

  GROUP 1 (

    '/u01/app/oradata/ORA11G/onlinelog/o1_mf_1_94hvy8pw_.log',

    '/u01/app/fast_recovery_area/ORA11G/onlinelog/o1_mf_1_94hvy9kk_.log'

  ) SIZE 50M BLOCKSIZE 512,

  GROUP 2 (

    '/u01/app/oradata/ORA11G/onlinelog/o1_mf_2_94hvyc26_.log',

    '/u01/app/fast_recovery_area/ORA11G/onlinelog/o1_mf_2_94hvydb6_.log'

  ) SIZE 50M BLOCKSIZE 512,

  GROUP 3 (

    '/u01/app/oradata/ORA11G/onlinelog/o1_mf_3_94hvyfvx_.log',

    '/u01/app/fast_recovery_area/ORA11G/onlinelog/o1_mf_3_94hvyh9v_.log'

  ) SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

  '/u01/app/oradata/ORA11G/datafile/o1_mf_system_92t6zl2m_.dbf',

  '/u01/app/oradata/ORA11G/datafile/o1_mf_sysaux_92t6zl5k_.dbf',

  '/u01/app/oradata/ORA11G/datafile/o1_mf_undotbs1_92t6zl6d_.dbf',

  '/u01/app/oradata/ORA11G/datafile/o1_mf_users_92t6zl83_.dbf',

  '/u01/app/oradata/ORA11G/datafile/o1_mf_example_92t74b1f_.dbf',

  '/u01/app/oradata/ORA11G/datafile/o1_mf_trcatbl_96mlzz0j_.dbf',

  '/u01/app/oradata/ORA11G/datafile/o1_mf_testtbl_9j2sxn9r_.dbf',

  '/u01/app/oradata/ORA11G/datafile/o1_mf_awp_9khloyod_.dbf'

CHARACTER SET AL32UTF8

;

 

兩個地方需要修改,一個是online group資訊。因為我們是完全關閉資料庫,不會有啟動之後執行個體恢複步驟。而且OMF策略的一些檔案在一些版本下是不能指定,所以為避免麻煩,刪除掉記錄檔資訊,讓Oracle執行過程中重新建立日誌。另一個改動是資料檔案的目錄資訊,將其中的ORA11G替換為ORA11CL。
 
 

 

STARTUP NOMOUNT

CREATE CONTROLFILE SET DATABASE "ORA11CL" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 1248

LOGFILE

  GROUP 1 SIZE 50M BLOCKSIZE 512,

  GROUP 2 SIZE 50M BLOCKSIZE 512,

  GROUP 3 SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

  '/u01/app/oradata/ORA11CL/datafile/o1_mf_system_92t6zl2m_.dbf',

  '/u01/app/oradata/ORA11CL/datafile/o1_mf_sysaux_92t6zl5k_.dbf',

  '/u01/app/oradata/ORA11CL/datafile/o1_mf_undotbs1_92t6zl6d_.dbf',

  '/u01/app/oradata/ORA11CL/datafile/o1_mf_users_92t6zl83_.dbf',

  '/u01/app/oradata/ORA11CL/datafile/o1_mf_example_92t74b1f_.dbf',

  '/u01/app/oradata/ORA11CL/datafile/o1_mf_trcatbl_96mlzz0j_.dbf',

  '/u01/app/oradata/ORA11CL/datafile/o1_mf_testtbl_9j2sxn9r_.dbf',

  '/u01/app/oradata/ORA11CL/datafile/o1_mf_awp_9khloyod_.dbf'

CHARACTER SET AL32UTF8

;

 

此外,我們注意在指令碼中沒有temp tablespace的資訊。在trace檔案中,我們看到Oracle可以在open reset之後建立資料表空間。當然,原始Trace檔案中包括臨時檔案的名稱資訊,筆者也將其刪除,促使Oracle自動建立。
 
 

ALTER DATABASE OPEN RESETLOGS;

 

ALTER TABLESPACE TEMP ADD TEMPFILE SIZE 481296384  AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
 
ALTER TABLESPACE TEMPTEST ADD TEMPFILE SIZE 1024M AUTOEXTEND OFF;

ALTER TABLESPACE TEMPTEST ADD TEMPFILE SIZE 525328384  AUTOEXTEND OFF;

ALTER TABLESPACE AWP_TEMP ADD TEMPFILE SIZE 1024M AUTOEXTEND ON NEXT 104857600  MAXSIZE 32767M;
 
 

最後是參數檔案準備,可以使用ora11g作為範本進行改寫。

 

SQL> create pfile from spfile;

File created.

 

[oracle@SimpleLinux dbs]$ ls -l | grep init

-rw-r--r-- 1 oracle oinstall    2851 May 15  2009 init.ora

-rw-r--r-- 1 oracle oinstall    1070 Mar 10 11:17 initora11g.ora

 

修改其中內容,主要是資料庫名稱,控制檔案參數control_files要進行屏蔽。對應所有與ora11g有關目錄需要進行改寫。

 

ora11cl.__db_cache_size=71303168

ora11cl.__java_pool_size=20971520

ora11cl.__large_pool_size=4194304

ora11cl.__oracle_base='/u01/app'#ORACLE_BASE set from environment

ora11cl.__pga_aggregate_target=113246208

ora11cl.__sga_target=264241152

ora11cl.__shared_io_pool_size=0

ora11cl.__shared_pool_size=150994944

ora11cl.__streams_pool_size=8388608

*.audit_file_dest='/u01/app/admin/ora11cl/adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'

#*.control_files='/u01/app/oradata/ORA11CL/controlfile/o1_mf_92t72zkf_.ctl','/u01/app/fast_recovery_area/ORA11CL/controlfile/o1_mf_92t72zyj_.ctl'
 
*.db_block_size=8192

*.db_create_file_dest='/u01/app/oradata'

*.db_domain=''

*.db_name='ora11cl'

*.db_recovery_file_dest='/u01/app/fast_recovery_area'

*.db_recovery_file_dest_size=10737418240

*.diagnostic_dest='/u01/app'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=ora11cloneXDB)'

*.log_checkpoints_to_alert=TRUE

*.memory_max_target=360m

*.memory_target=360m

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_retention=300

*.undo_tablespace='UNDOTBS1'

*.use_large_pages='true'

 

儲存為initora11clone.ora檔案。

 

[oracle@SimpleLinux dbs]$ ls -l | grep init

-rw-r--r-- 1 oracle oinstall    2851 May 15  2009 init.ora

-rw-r--r-- 1 oracle oinstall    1127 Mar 10 11:49 initora11clone.ora

-rw-r--r-- 1 oracle oinstall    1070 Mar 10 11:17 initora11g.ora

 

目錄建立,依據前面定位的目錄資訊,手工建立檔案系統目錄。

 

[root@SimpleLinux ~]# mkdir -p /u01/app/admin/ora11cl/adump

[root@SimpleLinux ~]# mkdir -p /u01/app/fast_recovery_area/ORA11CL/controlfile/

[root@SimpleLinux ~]# mkdir -p /u01/app/oradata/ORA11CL/datafile

[root@SimpleLinux ~]# mkdir -p /u01/app/oradata/ORA11CL/onlinelog/

[root@SimpleLinux ~]# mkdir -p /u01/app/fast_recovery_area/ORA11CL/onlinelog/

[root@SimpleLinux ~]# cd /u01

[root@SimpleLinux u01]# chown -R oracle:oinstall /u01

 

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.