---------- oracle rman 備份與恢復 ------
-- rman 自動備份腳本 2011/7/23 14:32:55
rman target / log=/oracle/bk_rman/rmanbackup.log <<!
# -- as compressed backupset 壓縮備份
# -- filesperset 2 用多少個線程;---好像翻譯名字不對;
backup as compressed backupset filesperset 2 database format '/oracle/bk_rman/%u';
backup archivelog all format '/oracle/bk_rman/%u.bk';
delete noprompt obsolete;
!
-- 玩恢復;2011/7/23 14:38:36
-- 做業務
col NAME for a50
select FILE#, name from V$datafile;
update scott.emp set sal=sal+1;
commit;
alter system switch logfile;
-- rman 恢復到新的位置 2011/7/23 15:15:48
-- 假如 源文件 爲 去哪
-- 到哪去
-- 源文件
-- 源文件
-- 到哪去
-- 去 rman 中執行;
RUN
{
ALLOCATE CHANNEL d1 DEVICE TYPE DISK;
SQL "ALTER TABLESPACE users OFFLINE IMMEDIATE";
SET NEWNAME FOR DATAFILE '/oracle/oradata/orcl_new/users01.dbf'
TO '/oracle/oradata/users01.QQ';
RESTORE DATAFILE '/oracle/oradata/orcl_new/users01.dbf';
SWITCH DATAFILE '/oracle/oradata/orcl_new/users01.dbf';
RECOVER DATAFILE '/oracle/oradata/users01.QQ';
SQL "ALTER TABLESPACE users ONLINE";
}
------- rman 遠程服務器使用 rman 備份的數據庫 恢復到本地 實驗2011/7/23 20:55:23 -----------
------- begin --------
-- 首先 把 rman 備份拷貝到本地; scp... /tmp/rman_bk
1.無配置啓動
1)rman target /
在日誌中找出pfile文件參數;並寫出initxxx.ora中;
2)sqlplus 中 startup nomount;
2.找控制文件, 從拷貝回來的備份文件中;
找到從備份文件中找出存儲控制文件的那個備份文件,特性是,小,時間靠後;
pfile中指定controfile位置 -- 參考 最後的pfile 文件格式; initXXX.ora
sqlplus
startup nomount force
3.-- 恢復控制文件 文件是根據 2 步驟找出來的;
rman
restore controlfile from '/tmp/rman_bk/0kmi5ov2'
4.登記到catalog
-- sqlplus 中
startup force mount
-- rman 中, 校驗 copy 與backup 文件
crosscheck copy;
crosscheck backup;
-- 查看恢復ctlF中記錄的copy(archivelog), backup(rman的備份)信息
list copy ;
list backup;
-- 清空恢復的文件中的copy(archivelog), backup(rman的備份) 記錄
delete noprompt expired copy;
delete noprompt expired backup;
-- 登記備份的文件到 controlfile中;
catalog start with '/tmp/rman_bk';
-- 恢復 spfile --> 查看在哪個備份文件中;
list backup of spfile;
restore spfile;
---------- 將數據文件恢復到新的路徑 -- 控制文件從存儲了各個數據文件的存放地址,所以改恢復路經;-------------
-- 1.組合成要恢復的路經設置語句;
select 'set newname for datafile '''||name||''' to ''/oracle/oradata/orcl/'|| substr(name,7)||''';' from v$datafile;
-- 2. rman中執行恢復 set newname .... 來自於 1.的輸出結果
run
{
set newname for datafile '/o254/system01.dbf' to '/oracle/oradata/orcl/system01.dbf';
set newname for datafile '/o254/undotbs01.dbf' to '/oracle/oradata/orcl/undotbs01.dbf';
set newname for datafile '/o254/sysaux01.dbf' to '/oracle/oradata/orcl/sysaux01.dbf';
set newname for datafile '/o254/users01.dbf' to '/oracle/oradata/orcl/users01.dbf';
set newname for datafile '/o254/example01.dbf' to '/oracle/oradata/orcl/example01.dbf';
restore database;
switch datafile all;
recover database;
}
/* 出現如下錯誤,正常--- 因爲log文件位置不對;
RMAN-06054: media recovery requesting unknown log: thread 1 seq 9 lowscn 1531825
*/
-- 3. 在sqlplus中修改日誌文件路經 因 controlfile 文件中存儲了 日誌文件的路經( rman 備份的那個 controlfile ),所以要替換成新的路經;
select 'alter database rename file '''||member||''' to '''|| replace(member,'/o254/','/oracle/oradata/orcl/')||''';' from v$logfile;
-- 得出如下修改命令 --> 修改 controlfile 存儲日誌文件的地址;
alter database rename file '/o254/redo03.log' to '/oracle/oradata/orcl/redo03.log';
alter database rename file '/o254/redo02.log' to '/oracle/oradata/orcl/redo02.log';
alter database rename file '/o254/redo01.log' to '/oracle/oradata/orcl/redo01.log';
-- 啓動 DB 用 resetlog方式;
alter database open resetlog;
----- end ---------
----------------- 臨時表空間的文件恢復後不能用的解決方法 ---------------------
-- 查看臨時表空間信息;
select file#, NAME, status, CREATION_TIME from v$tempfile;
-- 臨時表空間 增加文件;
alter tablespace temp add tempfile '/oracle/oradata/orcl/temp02.dbf'
size 50m
maxsize 100m
autoextend on;
-- 讓臨時表空間數據文件下線, 並刪除之
alter database tempfile '/oracle/oradata/orcl/temp.dbf' offline;
alter database tempfile '/oracle/oradata/orcl/temp.dbf' drop ;
-- 查詢出表空間創建的 DDL語句;
set long 99999
set pagesize 9999
SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.TABLESPACE_NAME) from dba_tablespaces ts;
---------------- end --------------------------------------------------------
---- pfile 文件 樣例 initXXX.ora------------------------
__shared_pool_size = 113246208
__large_pool_size = 4194304
__java_pool_size = 4194304
__streams_pool_size = 0
sga_target = 285212672
pga_aggregate_target = 94371840
db_block_size = 8192
__db_cache_size = 159383552 # 152M
compatible = 10.2.0.1.0
control_files = /oracle/oradata/orcl/control01.ctl, /oracle/oradata/orcl/control02.ctl, /oracle/oradata/orcl/control03.ctl
# archive file save path
log_archive_dest_1 = 'location=/oracle/arc'
log_archive_format = %s_%t_%r.arc
db_file_multiblock_read_count= 16
db_recovery_file_dest = /oracle/flash_recovery_area
db_recovery_file_dest_size= 2147483648
undo_management = AUTO
undo_tablespace = UNDOTBS1
remote_login_passwordfile= EXCLUSIVE
job_queue_processes = 10
background_dump_dest = /oracle/admin/orcl/bdump
user_dump_dest = /oracle/admin/orcl/udump
core_dump_dest = /oracle/admin/orcl/cdump
audit_file_dest = /oracle/admin/orcl/adump
db_name = orcl
open_cursors = 300