幾種ASM與File System資料檔案轉移方法
Oracle 從 10g 引入 ASM 全新的檔案管理系統。進入 11g 之後, ASM+RAC+DG 成為標準 MAA 的配置結構。簡單的說, ASM 就是一種軟體的實現的分散式儲存結構,和傳統的檔案系統有一定差距。
在實踐中,我們會遇到 ASM 與 File System 之間檔案轉儲過程。同檔案系統不同, ASM 是不能夠直接訪問的。本篇介紹幾種實現 ASM 與 File System 資料檔案轉儲策略。
1 、環境介紹
實驗使用 Oracle Linux 環境,對應底層 Oracle 11g 單例項 +ASM 儲存方案。
[root@SimpleLinux ~]# uname -r
2.6.18-128.el5
[root@SimpleLinux ~]# ps -ef | grep pmon
grid 3214 1 0 13:53 ? 00:00:00 asm_pmon_+ASM
oracle 3294 1 0 13:53 ? 00:00:00 ora_pmon_ora11g
root 3376 3107 0 13:53 pts/0 00:00:00 grep pmon
資料庫使用 11gR2 版本。
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
建立一個資料檔案目錄。
[oracle@SimpleLinux oracle]$ cd $ORACLE_HOME
[oracle@SimpleLinux db_1]$ mkdir oradata
[oracle@SimpleLinux db_1]$ ls -l | grep oradata
drwxr-xr-x 2 oracle oinstall 4096 Dec 27 13:56 oradata
資料庫採用歸檔模式, 注意:下述實驗要求在歸檔模式才能實現。
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 25
Next log sequence to archive 27
Current log sequence 27
建立一個實驗檔案表空間。
SQL> create tablespace test datafile '/u01/app/oracle/product/11.2.0/db_1/oradata/testtbl.dbf' size 100m
2 extent management local uniform size 1m
3 segment space management auto;
Tablespace created
SQL> select file_name, tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
-------------------------------------------------- ------------------------------
+DATA/ora11g/datafile/users.259.825944329 USERS
+DATA/ora11g/datafile/undotbs1.258.825944329 UNDOTBS1
+DATA/ora11g/datafile/sysaux.257.825944327 SYSAUX
+DATA/ora11g/datafile/system.256.825944325 SYSTEM
+DATA/ora11g/datafile/example.265.825944513 EXAMPLE
/u01/app/oracle/product/11.2.0/db_1/oradata/testtb TEST
l.dbf
6 rows selected
2 、 ASMCMD 命令
ASMCMD 是 Oracle 提供的管理 ASM 的命令列工具。進入 11g 之後, ASMCMD 提供了 cp 命令,仿照 Linux 平臺的 cp 命令。 ASMCMD 是我們事先複製的一種選擇。
我們實驗是將檔案系統的 TEST 檔案,轉移到 +DATA ASM DiskGroup 中。
首先切換一下 logfile 。
SQL> alter system switch logfile;
System altered
-- 我們事先 online 移動,是進行 offline 之後才行;
SQL> alter database datafile '/u01/app/oracle/product/11.2.0/db_1/oradata/testtbl.dbf' offline;
Database altered
SQL> select file_name, online_status from dba_data_files where file_id=6;
FILE_NAME ONLINE_STATUS
-------------------------------------------------- -------------
/u01/app/oracle/product/11.2.0/db_1/oradata/testtb RECOVER
l.dbf
進入 ASMCMD 命令列進行處理。
-- 使用 grid 使用者,注意這個過程是伴隨著登入 ASM 例項過程的。
[oracle@SimpleLinux oradata]$ su - grid
Password:
[grid@SimpleLinux ~]$ asmcmd
ASMCMD> cp /u01/app/oracle/product/11.2.0/db_1/oradata/testtbl.dbf +DATA/ora11g/datafile/testtbl.dbf
copying /u01/app/oracle/product/11.2.0/db_1/oradata/testtbl.dbf -> +DATA/ora11g/datafile/testtbl.dbf
在 ASM 中,檢視到檔案的確儲存在目錄了。
ASMCMD> ls -l
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE DEC 27 13:00:00 Y EXAMPLE.265.825944513
DATAFILE UNPROT COARSE DEC 27 13:00:00 Y SYSAUX.257.825944327
DATAFILE UNPROT COARSE DEC 27 13:00:00 Y SYSTEM.256.825944325
DATAFILE UNPROT COARSE DEC 27 13:00:00 Y UNDOTBS1.258.825944329
DATAFILE UNPROT COARSE DEC 27 13:00:00 Y USERS.259.825944329
N testtbl.dbf => +DATA/ASM/DATAFILE/testtbl.dbf.268.835279797
另外在 Oracle 的控制檔案體系中,修改檔名稱。
SQL> alter database rename file '/u01/app/oracle/product/11.2.0/db_1/oradata/testtbl.dbf' to '+DATA/ora11g/datafile/testtbl.dbf';
Database altered
SQL> select file_name, file_id from dba_data_files;
FILE_NAME FILE_ID
-------------------------------------------------- ----------
(篇幅原因,有省略 …… )
+DATA/ora11g/datafile/example.265.825944513 5
+DATA/ora11g/datafile/testtbl.dbf 6
6 rows selected
由於進行 online 操作,對資料檔案 6 進行恢復、上線。
SQL> alter database recover datafile 6;
Database altered
SQL> alter database datafile 6 online;
Database altered
SQL> select file_name, file_id, online_status from dba_data_files;
FILE_NAME FILE_ID ONLINE_STATUS
-------------------------------------------------- ---------- -------------
(篇幅原因,有省略 …… )
+DATA/ora11g/datafile/example.265.825944513 5 ONLINE
+DATA/ora11g/datafile/testtbl.dbf 6 ONLINE
6 rows selected
原來的資料檔案,刪掉就好了。
[oracle@SimpleLinux oradata]$ ls -l
total 102512
-rw-r----- 1 oracle asmadmin 104865792 Dec 27 14:02 testtbl.dbf
[oracle@SimpleLinux oradata]$ rm testtbl.dbf
試驗成功。
3 、 DBMS_FILE_TRANSFER 包方法
Oracle PL/SQL 中包 dbms_file_transfer 也可以實現傳輸。其中的 copy_file 過程,可以實現將檔案傳輸跨越 ASM 和檔案系統。
使用 dbms_file_transfer 包前提需要指定檔案目錄,在 Oracle 中是透過 directory 物件實現的。
SQL> create directory souredir as '+DATA/ora11g/datafile/';
Directory created
SQL> create directory destdir as '/u01/app/oracle/product/11.2.0/db_1/oradata';
Directory created
本方法我們將上節中的 ASM 檔案傳輸到 File System 中。
SQL> select file_name, file_id, online_status from dba_data_files;
FILE_NAME FILE_ID ONLINE_STATUS
-------------------------------------------------- ---------- -------------
(篇幅原因,有省略 …… )
+DATA/ora11g/datafile/example.265.825944513 5 ONLINE
+DATA/ora11g/datafile/testtbl.dbf 6 RECOVER – 已經被 offline 狀態的資料檔案
6 rows selected
SQL> begin
2 dbms_file_transfer.copy_file(source_directory_object => 'souredir',
3 source_file_name => 'testtbl.dbf',
4 destination_directory_object => 'destdir',
5 destination_file_name => 'testtbl.dbf');
6 end;
7 /
PL/SQL procedure successfully completed
檔案系統中檢視到檔案 testtbl.dbf 。
[oracle@SimpleLinux oradata]$ ls -l
total 102512
-rw-r----- 1 oracle asmadmin 104865792 Dec 27 14:34 testtbl.dbf
SQL> alter database rename file '+DATA/ora11g/datafile/testtbl.dbf' to '/u01/app/oracle/product/11.2.0/db_1/oradata/testtbl.dbf';
Database altered
SQL> alter database recover datafile 6;
Database altered
對資料檔案 online 操作。
SQL> alter database datafile '/u01/app/oracle/product/11.2.0/db_1/oradata/testtbl.dbf' online;
Database altered
SQL> select file_name, file_id, online_status from dba_data_files;
FILE_NAME FILE_ID ONLINE_STATUS
-------------------------------------------------- ---------- -------------
(篇幅原因,有省略 …… )
+DATA/ora11g/datafile/example.265.825944513 5 ONLINE
/u01/app/oracle/product/11.2.0/db_1/oradata/testtb 6 ONLINE
l.dbf
6 rows selected
試驗成功。
4 、 RMAN 方法
在沒有 cp 命令之前, RMAN 是一種比較常用的方法。我們先將檔案 offline 。
SQL> alter database datafile '/u01/app/oracle/product/11.2.0/db_1/oradata/testtbl.dbf' offline;
Database altered
啟動 RMAN copy 過程。
RMAN> connect target /
connected to target database: ORA11G (DBID=4222144573)
using target database control file instead of recovery catalog
RMAN> copy datafile '/u01/app/oracle/product/11.2.0/db_1/oradata/testtbl.dbf' to '+RECO'
2> ;
Starting backup at 27-DEC-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=41 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=/u01/app/oracle/product/11.2.0/db_1/oradata/testtbl.dbf
output file name=+RECO/ora11g/datafile/test.282.835281667 tag=TAG20131227T144106 RECID=2 STAMP=835281676
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
Finished backup at 27-DEC-13
更改檔名,進行資料檔案 online 操作。
SQL> alter database rename file '/u01/app/oracle/product/11.2.0/db_1/oradata/testtbl.dbf' to '+RECO/ora11g/datafile/test.282.835281667';
Database altered
SQL> alter database recover datafile 6;
Database altered
SQL> alter database datafile 6 online;
Database altered
試驗成功。
5 、結論
隨著 ASM 的日益普及,我們進行檔案系統和 ASM 之間遷移的過程越來越多。使用好現有工具,可以簡化我們的操作過程。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2150537/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ASM資料和File System檔案轉移方法集錦ASM
- 【ASM】ASM資料檔案和OS檔案(FILESYSTEM)轉移方法總結ASM
- ASM叢集檔案系統ACFS(ASM Cluster File System)ASM
- 遷移資料庫檔案到ASM資料庫ASM
- System File1 File Header(資料庫System檔案1檔案頭)損壞情況的恢復Header資料庫
- 移動資料檔案從ASM到檔案系統ASM
- 如何遷移ASM資料檔案到檔案系統ASM
- 【資料遷移】RMAN遷移資料庫到ASM(二)切換資料檔案到ASM資料庫ASM
- 在ASM Diskgroup間移動資料檔案ASM
- 使用dbms_file_transfer轉換ASM檔案ASM
- Move datafile:From File System to ASMASM
- Move datafile:From ASM to File SystemASM
- Oracle ACFS ( ASM Cluster File System )OracleASM
- ASM與檔案系統之間copy資料檔案--檔案系統到ASMASM
- ArcEngine 開啟AutoCAD檔案的幾種方法與讀取CAD資料的方法
- excel檔案中的資料匯入Oracle資料庫的幾種方法ExcelOracle資料庫
- ASM 檔案與本地檔案的轉換ASM
- 利用RMAN在檔案系統與ASM之間遷移資料庫ASM資料庫
- 【JAVA :File類的用法(一)】File類的構造方法-File類建立檔案與資料夾Java構造方法
- 移動資料檔案從檔案系統到ASM磁碟組中ASM
- oracle 表空間下資料檔案遷移的三種方法Oracle
- 移動Oracle資料檔案的方法Oracle
- 使用RMAN遷移檔案系統資料庫到ASM資料庫ASM
- 【原創】ASM下的資料檔案轉換為普通檔案ASM
- 計算檔案Checksum的幾種方法
- 用rman從檔案系統遷移資料庫到asm資料庫ASM
- 如何為asm db中system表空間的資料檔案使用別名!ASM
- Windows與Linux檔案系統互訪的幾種方法WindowsLinux
- Oracle使用RMAN將普通資料檔案轉成ASMOracleASM
- base64轉file檔案的兩種方式
- Google檔案系統(Google File System)論文Go
- ASM檔案系統遷移ASM
- ASM下遷移控制檔案ASM
- asm 檔案系統遷移ASM
- python儲存檔案的幾種方法Python
- Java寫入檔案的幾種方法分享Java
- asm管理的dg資料檔案缺失的處理方法ASM
- 【RAC】RAC本地資料檔案遷移至ASM的方法(3)ASM