qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          批量遷移Oracle數據文件,日志文件及控制文件

           有些時候需要將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 on

            6、后記

            a、數據遷移前建議先備份數據庫

            b、我們在遷移中使用了復制(cp)方式,實際上可以直接使用移動方式(mv)

            c、需要理解數據庫的啟動的幾個階段。即nomount狀態時不加載控制文件,mount狀態時不加載數據文件及日志文件

            d、對于數據庫啟動階段的深刻理解,有助于弄清楚什么狀態下我們能做什么,不能做什么

            e、對于控制文件位置以及參數中相關dump文件位置可以直接通過編輯pfile文件來完成。上例使用的是修改spfile文件

            f、遷移腳本可以根據需要進行相應的修改,注意我們定義了src_dir與tar_dir

            g、可將數據庫源文件夾重命名,重啟數據庫(open),open會校驗所有文件,以防止遷移中的部分文件丟失,無誤后可刪除源文件夾

            h、如果需要修改數據庫名,則可以通過nid來完成,相當于生成了一個新的數據庫

          posted on 2013-06-13 10:27 順其自然EVO 閱讀(381) 評論(0)  編輯  收藏 所屬分類: 數據庫DB2

          <2013年6月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 清涧县| 富民县| 咸阳市| 宝坻区| 东乡| 成都市| 哈尔滨市| 阳新县| 温泉县| 常宁市| 泸州市| 华坪县| 玛沁县| 绿春县| 南涧| 宜兰市| 乳源| 二手房| 海淀区| 榆中县| 梅州市| 大兴区| 望谟县| 确山县| 黄骅市| 通江县| 涿州市| 高陵县| 宿松县| 泸州市| 探索| 嘉善县| 施甸县| 湟源县| 阳原县| 大同县| 香河县| 手游| 宣武区| 定襄县| 西贡区|