溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

oracle學習-數(shù)據(jù)遷移

發(fā)布時間:2020-05-31 00:40:08 來源:網(wǎng)絡(luò) 閱讀:516 作者:拖鞋崽 欄目:關(guān)系型數(shù)據(jù)庫

如果只是遷移表空間或者數(shù)據(jù)文件,可以先將表空間或者數(shù)據(jù)文件offline之后移動位置,并通過

alert database rename 和 alter tablespace rename 將位置變化寫入控制文件即可


例 遷移數(shù)據(jù)文件

ALTER DATABASE DATAFILE '所要遷移的數(shù)據(jù)文件' OFFLINE;

拷貝到新位置

ALTER DATABASE RENAME FILE '索要遷移的數(shù)據(jù)文件' TO '新位置的數(shù)據(jù)文件';

介質(zhì)恢復

RECOVE DATAFILE '新位置的數(shù)據(jù)文件'

將相應(yīng)數(shù)據(jù)文件ONLINE

ALTER DATABASE DATAFILE '新位置的數(shù)據(jù)文件';


例 遷移表空間

將表空間OFFLINE

ALTER TABLESPACE 表空間名 OFFLINE;

拷貝到新位置

ALTER TABLESPACE 表空間名 RENAME DATAFILE '舊位置文件' TO '新位置文件';

表空間ONLINE

ALTER TABLESPACE 表空間名 ONLINE;


在MOUNT 狀態(tài)下遷移整個數(shù)據(jù)庫

需要考慮 數(shù)據(jù)文件,undo ,Temp,Redo 和控制文件 的遷移


數(shù)據(jù)文件

1 查看數(shù)據(jù)文件所在位置

SELECT FILE_NAME FROM DBA_DATA_FILES

UNION ALL

SELECT FILE_NAME FROM DBA_TEMP_FILES;


2 創(chuàng)建新文件夾存放數(shù)據(jù)文件

mkdir


3 編寫腳本進行備份 (其實也可以手動 但是一方面手動的話需要輸入大量的命令 二方面可能會因為連接中斷而導致進展的不順利)

vim rcopy.sh


#!/bin/ksh

export LANG=en_US

RMAN_LOG_FILE=${0}.out

ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

export ORACLE_HOME

RMAN=$ORACLE_HOME/bin/rman

export RMAN

ORACLE_SID=dave

export ORACLE_SID

ORACLE_USER=oracle

export ORACLE_USER

 

echo "ORACLE_SID:$ORACLE_SID">>$RMAN_LOG_FILE

echo"ORACLE_HOME:$ORACLE_HOME">>$RMAN_LOG_FILE

echo"ORACLE_USER:$ORACLE_USER">>$RMAN_LOG_FILE

echo"==========================">>$RMAN_LOG_FILE

 

chmod 666 $RMAN_LOG_FILE

 

$RMAN nocatalog TARGET / msglog$RMAN_LOG_FILE append <<EOF

run

{

allocate channel c1 type disk;

allocate channel c2 type disk;

copy datafile'/u01/app/oracle/oradata/dave/users01.dbf' to '/u01/app/oracle/oradata/anqing/users01.dbf';

copy datafile'/u01/app/oracle/oradata/dave/undotbs01.dbf' to'/u01/app/oracle/oradata/anqing/undotbs01.dbf';

copy datafile'/u01/app/oracle/oradata/dave/sysaux01.dbf' to'/u01/app/oracle/oradata/anqing/sysaux01.dbf';

copy datafile '/u01/app/oracle/oradata/dave/system01.dbf'to '/u01/app/oracle/oradata/anqing/system01.dbf';

copy datafile'/u01/app/oracle/oradata/dave/example01.dbf' to'/u01/app/oracle/oradata/anqing/example01.dbf';

copy datafile '/u01/app/oracle/oradata/dave/temp01.dbf' to '/u01/app/oracle/oradata/anqing/temp01.dbf';


release channel c2;

release channel c1;

}

EOF

 

echo >> $RMAN_LOG_FILE

exit

這里記得要賦予該腳本權(quán)限 chmod


4 將DB啟動到MOUNT狀態(tài)


shoutdown immediate

startup mount


5 啟動腳本

$ nohup sh /u01/rcopy.sh>rcopy.out 2>&1 &

$ jobs

$ jobs

當任務(wù)完成后 確認數(shù)據(jù)文件是否已經(jīng)拷貝到指定的文件夾當中

ls -lh


6 rname 數(shù)據(jù)文件

#!/bin/ksh

sqlplus / as sysdba<< EOF

alter database rename file'/u01/app/oracle/oradata/dave/users01.dbf' to '/u01/app/oracle/oradata/anqing/users01.dbf';

alter database rename file'/u01/app/oracle/oradata/dave/undotbs01.dbf' to'/u01/app/oracle/oradata/anqing/undotbs01.dbf';

alter database rename file'/u01/app/oracle/oradata/dave/sysaux01.dbf' to'/u01/app/oracle/oradata/anqing/sysaux01.dbf'; 

alter database rename file'/u01/app/oracle/oradata/dave/system01.dbf' to'/u01/app/oracle/oradata/anqing/system01.dbf'; 

alter database rename file'/u01/app/oracle/oradata/dave/example01.dbf' to'/u01/app/oracle/oradata/anqing/example01.dbf';

exit

EOF

 

記得給權(quán)限chmod 

運行 nohup sh rename.sh >rename.out 2>&1 &



7 查看數(shù)據(jù)庫驗證是否遷移成功

SELECT FILE_NAME FROM DBA_DATA_FILES

UNION ALL

SELECT FILE_NAME FROM DBA_TEMP_FILES;


這里我們會發(fā)現(xiàn)臨時表空間可能并未進行遷移 接下來我們進行處理臨時表空間數(shù)據(jù)文件


8 臨時表空間數(shù)據(jù)文件處理

我們在5的時候雖然進行了COPY 臨時表空間但是其實并沒有COPY成功,RMAN 在備份的時候也不會備份備份locally managed 的tempfiles。原因在于

    1. Locally managed tempfiles are always setto NOLOGGING mode. So thus will have no undo.
    2. Extents are managed by bitmap in each datafile to keep track of free or usedstatus of blocks in that datafile.
    3. The data dictionary does not manage the tablespace.
    4. Rollback information is not generated because there is no update on the     datadictionary.
    5. Media recovery does not recognize tempfiles.

所以在拷貝數(shù)據(jù)文件時,不需要拷貝臨時表空間,只需要在拷貝好后給臨時表空間添加一個數(shù)據(jù)文件并把原目錄下的臨時文件DROP即可

alter tablespace temp add tempfile'/u01/app/oracle/oradata/anqing/temp01.dbf' size 500M autoextend off;


alter tablespace temp drop tempfile'/u01/app/oracle/oradata/dave/temp01.dbf';


再次進行數(shù)據(jù)文件驗證

SELECT FILE_NAME FROM DBA_DATA_FILES

UNION ALL

SELECT FILE_NAME FROM DBA_TEMP_FILES;

檢查如果沒問題了的話 就可以對原來的數(shù)據(jù)文件等進行刪除處理了


處理REDO LOGFILE

1 查看redo信息

SELECT GROUP#, TYPE, MEMBER FROM $LOGFILE;


SELECT GROUP#, THREAD#. ARCHIVED, STATUS, BYTES/1024/1024 FROM V$LOG;


SELECT b.group#, b.status, a.member,

FROM V$LOGFILE a, V$LOG b

WHERE a.group# = b.group#;


這里我們給予每個group添加一個redo logfile,然后把舊目錄下的logfile drop掉即可

這里要助理我們只能drop inactive 和 unused狀態(tài)下的logfile 其他狀態(tài)不能drop


alter database add logfile member'/u01/app/oracle/oradata/anqing/redo01.log' to group 1;  

alter database add logfile member'/u01/app/oracle/oradata/anqing/redo02.log' to group 2;

alter database add logfile member'/u01/app/oracle/oradata/anqing/redo03.log' to group 3;


驗證是否添加成功

select b.group# , b.status ,a.member from v$logfile a , v$log b where a.group# = b.group# order by 1;


2 刪除舊的logfile

假設(shè) 這里group 1是ACTIVE,我們不能drop,所以我們先drop 2和3,然后switch logfile,在drop group 1。

ALTER DATABASE DROP LOGFILE MEMBER '/u01/app/oracle/oradata/dave/redo03.log';

ALTER DATABASE DROP LOGFILE MEMBER'/u01/app/oracle/oradata/dave/redo02.log';

ALTER DATABASE DROP LOGFILE MEMBER'/u01/app/oracle/oradata/dave/redo01.log';

最后一條報錯 我們需要切換一下日志狀態(tài)

alter system switch logfile;

再次 drop

ALTER DATABASE DROP LOGFILE MEMBER'/u01/app/oracle/oradata/dave/redo01.log';

驗證

select b.group# , b.status , a.memberfrom v$logfile a , v$log b where a.group# = b.group# order by 1;


控制文件遷移

將庫shutdown,然后把控制文件copy 到新位置,修改一下pfile參數(shù)就可以了

create pfile from spfile;

shutdown immediate

cp 舊控制文件 新控制文件

create spfile frompfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initdave.ora';

startup

檢查

show parameter control_files

大功告成



向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI