由 dbf 表空間文件恢復 Oracle 數據


一、需求分析

服務器A中的數據庫實例被刪除,幸好dbf文件還在,遂准備由dbf文件恢復數據到服務器B續命,待恢復的數據庫實例名為 orcl1

服務器B中的數據庫為新安裝,已經初始化好 orcl 實例,首先對比兩個實例的dbf文件

↑ 服務器A中待恢復的 orcl1 實例dbf文件 ↑

 

↑ 服務器B中的 orcl 實例dbf文件 ↑ 

 

對比可知新增的dbf文件是PORTAL.DBF、SDE.DBF、WZYZT.DBF,猜測各自對應三個同名用戶

思路就出來了:

1、新建orcl1實例

2、新增三個表空間文件

3、新增三個同名用戶,分別授權

4、恢復數據查看校驗

二、創建orcl1實例

1、打開 “開始 - 所有程序 - Oracle - OraDb11g_home1 - 配置和移植工具 - Database Configuration Assistant”

步驟 1:默認

步驟 2:默認

步驟 3:全局數據庫名:orcl1,SID:orcl1

步驟 4:默認

步驟 5 填寫管理員賬戶的密碼

后面全部默認

確認開始創建orcl1實例

 done,使用 PL/SQL 進行連接測試

三、恢復dbf

1、使用 PL/SQL 連接到orcl1實例,創建表空間及用戶,對用戶授權

create tablespace portal datafile 'C:\app\Administrator\oradata\orcl1\portal.dbf' size 1024M;
create tablespace sde datafile 'C:\app\Administrator\oradata\orcl1\sde.dbf' size 1024M;
create tablespace wzyzt datafile 'C:\app\Administrator\oradata\orcl1\wzyzt.dbf' size 1024M;

create user portal identified by portal default tablespace portal;
create user sde identified by sde default tablespace sde;
create user wzyzt identified by wzyzt default tablespace wzyzt;

grant connect,dba,resource to portal;
grant connect,dba,resource to sde;
grant connect,dba,resource to wzyzt;

2、使用 sqlplus 以 sysdba 身份登錄,對控制文件進行備份;

sqlplus /nolog(此處不能加分號,否則黑屏窗口會一閃而過)

conn /as sysdba 登錄

執行 alter database backup controlfile to trace; 備份控件文件到trace文件 

找到oracle的安裝目錄,如:C:\app\Administrator,按修改時間降序,找到最近的trace文件(orcl1_ora_xxx.trc)備份好(建議使用Everything)

3、shutdown immediate 停止數據庫實例

4、備份C:\app\Administrator\oradata目錄下的該實例文件夾(例如:orcl),接着將該實例文件夾刪除,必須是全部刪除,在oradata文件夾下新建orcl1文件夾把需恢復的dbf拷貝到orcl1目錄下。

5、執行 startup nomount,把數據庫啟動到nomount狀態

6、從第2步備份出來trace文件中拷貝CREATE CONTROLFILE部分語句來重建控制文件:

紅框 1 改為ARCHIVELOG

紅框 2 因為前面是根據恢復的dbf創建了對應表空間,所以這里不用改,但還是需要確認一下

執行修改后的sql

CREATE CONTROLFILE REUSE DATABASE "ORCL1" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'C:\APP\ADMINISTRATOR\ORADATA\ORCL1\REDO01.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 'C:\APP\ADMINISTRATOR\ORADATA\ORCL1\REDO02.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 'C:\APP\ADMINISTRATOR\ORADATA\ORCL1\REDO03.LOG'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  'C:\APP\ADMINISTRATOR\ORADATA\ORCL1\SYSTEM01.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\ORCL1\SYSAUX01.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\ORCL1\UNDOTBS01.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\ORCL1\USERS01.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\ORCL1\PORTAL.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\ORCL1\SDE.DBF',
  'C:\APP\ADMINISTRATOR\ORADATA\ORCL1\WZYZT.DBF'
CHARACTER SET ZHS16GBK
;

7、執行 recover database,這兩個報錯直接無視

8、執行 alter database open;

恢復完成,登錄數據庫進行驗證

 

參考鏈接:http://blog.sina.com.cn/s/blog_a59b6d310102vat0.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM