批量遷移Oracle資料檔案,記錄檔及控制檔案

來源:互聯網
上載者:User

   有些時候需要將Oracle的多個資料檔案以及記錄檔重定位或者遷移到新的分區或新的位置,比如磁碟空間不足,或因為特殊需求。對於這種情形可以採取批量遷移的方式將多個資料檔案或者記錄檔實現一次性遷移。當然備份恢複也是其中的方式之一。本文主要描述如何使用批量方式來遷移資料檔案,記錄檔。如需要也可以將整個資料庫遷移到新的位置以及重新命名資料庫。

1、環境及需求  robin@SZDB:~> cat /etc/issue    Welcome to SUSE Linux Enterprise Server 10 SP3 (x86_64) - Kernel \r (\l).    robin@SZDB:~> sqlplus -v    SQL*Plus: Release 10.2.0.3.0 - Production  下面的遷移主要是將資料庫/u02/database/SYBO2SZ下的所有檔案遷移到一個新的目錄/u02/database/SY5221BK下面。  源路徑:資料庫SYBO2SZ所有的資料檔案,記錄檔,控制檔案全部位於SYBO2SZ下的相應子目錄。  新路徑:資料庫SYBO2SZ所有的資料檔案,記錄檔,控制檔案全部移動到SY5221BK相應的子目錄下。  2、當前資料庫檔案位置(來源於資料字典)    sys@SYBO2SZ> @dba_files_all_2.sql    Tablespace Name / File Class  Filename                                                      File Size Auto  ----------------------------- ------------------------------------------------------- --------------- ----  GOEX_ACCOUNT_IDX              /u02/database/SYBO2SZ/oradata/SYBO2SZ_account_idx.dbf        16,777,216 YES  GOEX_ACCOUNT_TBL              /u02/database/SYBO2SZ/oradata/SYBO2SZ_account_tbl.dbf        25,165,824 YES  GOEX_ARCHIVE_IDX              /u02/database/SYBO2SZ/oradata/SYBO2SZ_archive_idx.dbf        20,971,520 YES   --    .........                  .........................  SOE                           /u02/database/SYBO2SZ/oradata/soe.dbf                       934,043,648 YES  SOEINDEX                      /u02/database/SYBO2SZ/oradata/soeindex.dbf                  713,031,680 YES  SYSAUX                        /u02/database/SYBO2SZ/oradata/sysauxSYBO2SZ.dbf             325,058,560 YES  SYSTEM                        /u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf                524,288,000 YES  TBST                          /u02/database/SYBO2SZ/oradata/tbst.dbf                       10,485,760 YES  TEMP                          /u02/database/SYBO2SZ/temp/tempSYBO2SZ.dbf                  432,013,312 YES  UNDOTBS1                      /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ.dbf               429,916,160 YES  UNDOTBS2                      /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ2.dbf              314,572,800 YES  [ ONLINE REDO LOG ]           /u02/database/SYBO2SZ/redolog/log3aSYBO2SZ.log               20,971,520  [ ONLINE REDO LOG ]           /u02/database/SYBO2SZ/redolog/log3bSYBO2SZ.log               20,971,520  [ ONLINE REDO LOG ]           /u02/database/SYBO2SZ/redolog/log4aSYBO2SZ.log               20,971,520  [ ONLINE REDO LOG ]           /u02/database/SYBO2SZ/redolog/log4bSYBO2SZ.log               20,971,520                                                                                        ---------------  sum                                                                                     5,107,376,128      41 rows selected.    3、建立相應的目錄  oracle@SZDB:/u02/database/SYBO2SZ> more mkdir_SY5221BK.sh   #!/bin/sh  rm -rf /u02/database/SY5221BK/archive  rm -rf /u02/database/SY5221BK/backup  rm -rf /u02/database/SY5221BK/bdump  rm -rf /u02/database/SY5221BK/cdump  rm -rf /u02/database/SY5221BK/udump  rm -rf /u02/database/SY5221BK/controlf  rm -rf /u02/database/SY5221BK/oradata  rm -rf /u02/database/SY5221BK/redolog  rm -rf /u02/database/SY5221BK/undo  rm -rf /u02/database/SY5221BK/temp  rm -rf /u02/database/SY5221BK/ref_data  rm -rf /u02/database/SY5221BK/BNR  rm -rf /u02/database/SY5221BK/BNR/full  rm -rf /u02/database/SY5221BK/BNR/dump  rm -rf /u02/database/SY5221BK/dbcreatelogs     mkdir -p /u02/database/SY5221BK/flash_recovery_area   mkdir -p /u02/database/SY5221BK  mkdir -p /u02/database/SY5221BK/archive  mkdir -p /u02/database/SY5221BK/backup  mkdir -p /u02/database/SY5221BK/bdump  mkdir -p /u02/database/SY5221BK/cdump  mkdir -p /u02/database/SY5221BK/udump  mkdir -p /u02/database/SY5221BK/controlf  mkdir -p /u02/database/SY5221BK/oradata  mkdir -p /u02/database/SY5221BK/redolog  mkdir -p /u02/database/SY5221BK/undo  mkdir -p /u02/database/SY5221BK/temp  mkdir -p /u02/database/SY5221BK/ref_data  mkdir -p /u02/database/SY5221BK/BNR  mkdir -p /u02/database/SY5221BK/BNR/full  mkdir -p /u02/database/SY5221BK/BNR/dump  mkdir -p /u02/database/SY5221BK/dbcreatelogs     oracle@SZDB:/u02/database/SYBO2SZ> ./mkdir_SY5221BK.sh 4、實施遷移  sys@SYBO2SZ> startup mount force;   --->切換資料庫到mount狀態  ORACLE instance started.    Database mounted.  sys@SYBO2SZ> @/users/robin/dba_scripts/custom/sql/transfer_db_files -->呼叫指令碼進行資料及記錄檔的遷移    Step 1, Coping file to destination from source  ============================================    Step 2, updating files to control file  ============================================    sys@SYBO2SZ> alter database open;   -->切換資料庫到open狀態    Database altered.    sys@SYBO2SZ> @dba_files_all_2.sql   -->驗證切換結果    Tablespace Name / File Class  Filename                                                     File Size Auto  ----------------------------- ---------------------------------------------------------------------- ----  GOEX_ACCOUNT_IDX              /u02/database/SY5221BK/oradata/SY5221BK_account_idx.dbf     16,777,216 YES    --..........                        .................  TEMP                          /u02/database/SY5221BK/temp/tempSY5221BK.dbf               432,013,312 YES  UNDOTBS1                      /u02/database/SY5221BK/undo/undotbsSY5221BK.dbf            429,916,160 YES  UNDOTBS2                      /u02/database/SY5221BK/undo/undotbsSY5221BK2.dbf           314,572,800 YES  [ ONLINE REDO LOG ]           /u02/database/SY5221BK/redolog/log3aSY5221BK.log            20,971,520  [ ONLINE REDO LOG ]           /u02/database/SY5221BK/redolog/log3bSY5221BK.log            20,971,520  [ ONLINE REDO LOG ]           /u02/database/SY5221BK/redolog/log4aSY5221BK.log            20,971,520  [ ONLINE REDO LOG ]           /u02/database/SY5221BK/redolog/log4bSY5221BK.log            20,971,520                                                                                         -------------  sum                                                                                    5,107,376,128    41 rows selected.    --如果僅僅是遷移資料檔案以及記錄檔則上述步驟完成即可  --如果需要修改相關的參數檔案以及遷移控制檔案則繼續下面的步驟  --由於控制檔案的在mount狀態下被校正,因此我們在nomount狀態下來處理    sys@SYBO2SZ> shutdown immediate;    sys@SYBO2SZ> startup nomount;      -->修改參數檔案之前先備份spfile  sys@SYBO2SZ> create pfile='/users/oracle/OraHome10g/dbs/initSYBO2SZ_bak.ora' from spfile;    File created.    -->下面對相關的參數檔案的路徑進行修改,如果不需要修改參數,則跳過下面的步驟  sys@SYBO2SZ> show parameter dump    NAME                                 TYPE        VALUE  ------------------------------------ ----------- ------------------------------  background_core_dump                 string      partial  background_dump_dest                 string      /u02/database/SYBO2SZ/bdump  core_dump_dest                       string      /u02/database/SYBO2SZ/cdump  max_dump_file_size                   string      UNLIMITED  shadow_core_dump                     string      partial  user_dump_dest                       string      /u02/database/SYBO2SZ/udump    sys@SYBO2SZ> alter system set background_dump_dest='/u02/database/SY5221BK/bdump' scope=both sid='*';    System altered.    sys@SYBO2SZ> alter system set core_dump_dest='/u02/database/SY5221BK/cdump' scope=both sid='*';    System altered.    sys@SYBO2SZ> alter system set user_dump_dest='/u02/database/SY5221BK/udump' scope=both sid='*';    System altered.    sys@SYBO2SZ> show parameter db_recovery_file_dest    NAME                                 TYPE        VALUE  ------------------------------------ ----------- ------------------------------  db_recovery_file_dest                string      /u02/database/SYBO2SZ/flash_re                                                   covery_area  db_recovery_file_dest_size           big integer 1G    sys@SYBO2SZ> alter system set db_recovery_file_dest='/u02/database/SY5221BK/flash_recovery_area' scope=both;    System altered.    sys@SYBO2SZ> show parameter LOG_ARCHIVE_DEST_1    NAME                                 TYPE        VALUE  ------------------------------------ ----------- ------------------------------  log_archive_dest_1                   string      LOCATION=/u02/database/SYBO2SZ                                                   /archive/  log_archive_dest_10                  string  sys@SYBO2SZ> alter system set log_archive_dest_1='LOCATION=/u02/database/SY5221BK/archive' scope=both;       System altered.    sys@SYBO2SZ> show parameter UTL_FILE_DIR    NAME                                 TYPE        VALUE  ------------------------------------ ----------- ------------------------------  utl_file_dir                         string      /u02/database/SYBO2SZ/udump    sys@SYBO2SZ> alter system set UTL_FILE_DIR='/u02/database/SY5221BK/udump' scope=both;  alter system set UTL_FILE_DIR='/u02/database/SY5221BK/udump' scope=both                   *  ERROR at line 1:  ORA-02095: specified initialization parameter cannot be modified  -->該參數不能修改記憶體值      sys@SYBO2SZ> alter system set UTL_FILE_DIR='/u02/database/SY5221BK/udump' scope=spfile;    System altered.    -->下面對控制檔案位置進行修改  sys@SYBO2SZ> show parameter control_f    NAME                                 TYPE        VALUE  ------------------------------------ ----------- ------------------------------  control_file_record_keep_time        integer     7  control_files                        string      /u02/database/SYBO2SZ/controlf                                                   /cntl1SYBO2SZ.ctl, /u02/databa                                                   se/SYBO2SZ/controlf/cntl2SYBO2                                                   SZ.ctl, /u02/database/SYBO2SZ/                                                   controlf/cntl3SYBO2SZ.ctl    -->將控制檔案複製到新位置  sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl /u02/database/SY5221BK/controlf/cntl1SY5221BK.ctl    sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl /u02/database/SY5221BK/controlf/cntl2SY5221BK.ctl    sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl /u02/database/SY5221BK/controlf/cntl3SY5221BK.ctl                -->Author : Robinson Cheng  -->Blog   : http://blog.csdn.net/robinson_0612                -->通過修改control_files參數來修改控制檔案位置                                                   sys@SYBO2SZ> alter system set control_files='/u02/database/SY5221BK/controlf/cntl1SY5221BK.ctl',    2  '/u02/database/SY5221BK/controlf/cntl2SY5221BK.ctl','/u02/database/SY5221BK/controlf/cntl3SY5221BK.ctl'    3  scope=spfile;    System altered.    sys@SYBO2SZ> shutdown immediate;    sys@SYBO2SZ> startup mount;    SQL> show parameter control_f    NAME                                 TYPE        VALUE  ------------------------------------ ----------- ------------------------------  control_file_record_keep_time        integer     7  control_files                        string      /u02/database/SY5221BK/control                                                   f/cntl1SY5221BK.ctl, /u02/data                                                   base/SY5221BK/controlf/cntl2SY                                                   5221BK.ctl, /u02/database/SY52                                                   21BK/controlf/cntl3SY5221BK.ct                                                   l    sys@SYBO2SZ> show parameter dump  background_core_dump                 string      partial  background_dump_dest                 string      /u02/database/SY5221BK/bdump  core_dump_dest                       string      /u02/database/SY5221BK/cdump  max_dump_file_size                   string      UNLIMITED  shadow_core_dump                     string      partial  user_dump_dest                       string      /u02/database/SY5221BK/udump    sys@SYBO2SZ> alter database open;    Database altered.5、遷移指令碼  sys@SYBO2SZ> ho more /users/robin/dba_scripts/custom/sql/transfer_db_files.sql  Prompt  Prompt Step 1, Coping file to destination from source  Prompt ============================================  Prompt  set linesize 200  set heading off verify off feedback off termout off pagesize 999  define src_dir='SYBO2SZ'  define tar_dir='SY5221BK'  spool /tmp/cp_files.sql  SELECT 'ho cp ' || name || ' ' || REPLACE (name, '&src_dir', '&tar_dir')    FROM v$datafile  UNION ALL  SELECT 'ho cp ' || name || ' ' || REPLACE (name, '&src_dir', '&tar_dir')    FROM v$tempfile  UNION ALL  SELECT 'ho cp ' || MEMBER || ' ' || REPLACE (MEMBER, '&src_dir', '&tar_dir') FROM v$logfile;  spool off;    @/tmp/cp_files.sql    set termout on  Prompt  Prompt  Step 2, updating files to control file  Prompt ============================================  Prompt  set termout off  spool /tmp/update_cntl.sql  SELECT    'alter database  rename file '''         || name         || '''  to '''         || REPLACE (name, '&src_dir', '&tar_dir')         || ''''         || ';'    FROM v$datafile  UNION ALL  SELECT    'alter database rename file '''         || name         || '''  to '''         || REPLACE (name, '&src_dir', '&tar_dir')         || ''''         || ';'    FROM v$tempfile  UNION ALL  SELECT    'alter database rename file '''         || MEMBER         || ''' to '''         || REPLACE (MEMBER, '&src_dir', '&tar_dir')         || ''''         || ';'    FROM v$logfile;  spool off;  set termout on;  @/tmp/update_cntl.sql  set heading on verify on feedback on termout on6、後記  a、資料移轉前建議先備份資料庫  b、我們在遷移中使用了複製(cp)方式,實際上可以直接使用移動方式(mv)  c、需要理解資料庫的啟動的幾個階段。即nomount狀態時不載入控制檔案,mount狀態時不載入資料檔案及記錄檔  d、對於資料庫啟動階段的深刻理解,有助於弄清楚什麼狀態下我們能做什麼,不能做什麼  e、對於控制檔案位置以及參數中相關dump檔案位置可以直接通過編輯pfile檔案來完成。上例使用的是修改spfile檔案  f、遷移指令碼可以根據需要進行相應的修改,注意我們定義了src_dir與tar_dir  g、可將資料庫源檔案夾重新命名,重啟資料庫(open),open會校正所有檔案,以防止遷移中的部分檔案丟失,無誤後可刪除源檔案夾  h、如果需要修改資料庫名,則可以通過使用nid命令修改 db name 及 dbid來完成,相當於產生了一個新的資料庫

更多參考

有關Oracle RAC請參考

     使用nid命令修改 db name 及 dbid
     使用crs_setperm修改RAC資源的所有者及許可權
     使用crs_profile管理RAC資源設定檔
     RAC 資料庫的啟動與關閉
     再說 Oracle RAC services
     Services in Oracle Database 10g
     Migrate datbase from single instance to Oracle RAC
     Oracle RAC 串連到指定執行個體
     Oracle RAC 負載平衡測試(結合伺服器端與用戶端)
     Oracle RAC 伺服器端串連負載平衡(Load Balance)
     Oracle RAC 用戶端串連負載平衡(Load Balance)
     ORACLE RAC 下非預設連接埠監聽配置(listener.ora tnsnames.ora)
     ORACLE RAC 監聽配置 (listener.ora tnsnames.ora)
     配置 RAC 負載平衡與容錯移轉
     CRS-1006 , CRS-0215 故障一例 
     基於Linux (RHEL 5.5) 安裝Oracle 10g RAC
     使用 runcluvfy 校正Oracle RAC安裝環境

有關Oracle 網路設定相關基礎以及概念性的問題請參考:
     配置非預設連接埠的動態服務註冊
     配置sqlnet.ora限制IP訪問Oracle
     Oracle 監聽器日誌配置與管理
     設定 Oracle 監聽器密碼(LISTENER)
     配置ORACLE 用戶端串連到資料庫

有關基於使用者管理的備份和備份恢複的概念請參考
     Oracle 冷備份
     Oracle 熱備份
     Oracle 備份恢複概念
     Oracle 執行個體恢複
     Oracle 基於使用者管理恢複的處理
     SYSTEM 資料表空間管理及備份恢複
     SYSAUX資料表空間管理及恢複
     Oracle 基於備份控制檔案的恢複(unsing backup controlfile)

有關RMAN的備份恢複與管理請參考
     RMAN 概述及其體繫結構
     RMAN 配置、監控與管理
     RMAN 備份詳解
     RMAN 還原與恢複
     RMAN catalog 的建立和使用
     基於catalog 建立RMAN儲存指令碼
     基於catalog 的RMAN 備份與恢複
     RMAN 備份路徑困惑
     使用RMAN實現異機備份恢複(WIN平台)
     使用RMAN遷移檔案系統資料庫到ASM
     linux 下RMAN備份shell指令碼
     使用RMAN遷移資料庫到異機

有關ORACLE體繫結構請參考
     Oracle 資料表空間與資料檔案
     Oracle 密碼檔案
     Oracle 參數檔案
     Oracle 聯機重做記錄檔(ONLINE LOG FILE)
     Oracle 控制檔案(CONTROLFILE)
     Oracle 歸檔日誌
     Oracle 復原(ROLLBACK)和撤銷(UNDO)
     Oracle 資料庫執行個體啟動關閉過程
     Oracle 10g SGA 的自動化管理
     Oracle 執行個體和Oracle資料庫(Oracle體繫結構)     

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.