批量遷移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 41 rows selected. |
3、創建相應的目錄
oracle@SZDB:/u02/database/SYBO2SZ> more mkdir_SY5221BK.sh mkdir -p /u02/database/SY5221BK/flash_recovery_area oracle@SZDB:/u02/database/SYBO2SZ> ./mkdir_SY5221BK.sh |
4、實施遷移
sys@SYBO2SZ> startup mount force; --->切換數據庫到mount狀態 Database mounted. 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 41 rows selected. --如果僅僅是遷移數據文件以及日志文件則上述步驟完成即可 sys@SYBO2SZ> shutdown immediate; sys@SYBO2SZ> startup nomount; -->修改參數文件之前先備份spfile File created. -->下面對相關的參數文件的路徑進行修改,如果不需要修改參數,則跳過下面的步驟 NAME TYPE VALUE 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 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 System altered. sys@SYBO2SZ> show parameter UTL_FILE_DIR NAME TYPE VALUE sys@SYBO2SZ> alter system set UTL_FILE_DIR='/u02/database/SY5221BK/udump' scope=both;
System altered. -->下面對控制文件位置進行修改 NAME TYPE VALUE -->將控制文件復制到新位置 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 -->通過修改control_files參數來修改控制文件位置 System altered. sys@SYBO2SZ> shutdown immediate; sys@SYBO2SZ> startup mount; SQL> show parameter control_f NAME TYPE VALUE sys@SYBO2SZ> show parameter dump sys@SYBO2SZ> alter database open; Database altered. |
5、遷移腳本
sys@SYBO2SZ> ho more /users/robin/dba_scripts/custom/sql/transfer_db_files.sql @/tmp/cp_files.sql set 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