oracle rman 備份與恢復 臨時表空間的文件問題解決 留痕


---------- 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




 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章