程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 如何從完好的數據文件恢復oracle數據庫

如何從完好的數據文件恢復oracle數據庫

編輯:Oracle數據庫基礎

一。有數據文件、控制文件和日志文件的備份1.服務器重裝了操作系統,oracle也重裝了。如果重裝的Oracle和以前損壞的數據庫是一模一樣的結構,那麼此時的恢復是比較簡單的。

1)刪除掉新建數據庫的所有數據文件、控制文件和日志文件。Copy原數據庫的數據文件、控制文件和日志文件到對應目錄下。

2)

Cmd>sqlplus /nolog

Sql>conn as sysdba

用戶名:system

密碼:(此處密碼為新創建數據庫的密碼)

Sql>shutdown immediate

Sql>startup nomount

Sql>alter database mount

此時看數據庫是不是能mount起來,有時會提示沒有口令文件PWDdemo.ora文件找不到。查看對應的目錄(database下)會發現該文件是存在的。此時需要注意,該口令文件是新安裝數據庫後創建實例時生成的口令文件,不是以前所用數據庫的口令文件,而現在,我們是用以前數據庫的控制文件和數據文件來打開以前的數據庫,所以此時需要重新創建一個口令文件。

Sql>shutdown immediate

Sql>host orapwd file=c:\oracle9i\database\PWDdemo.ora passWord=Oracle

EntrIEs=10 (放在database 目錄下)

Sql>startup nomount

Sql>alter database mount

Sql>alter database open

打開數據庫

2.如果新數據庫的安裝目錄和原有數據庫的目錄不一樣,那麼此時可以重建控制文件來打開數據庫。因為原控制文件中記錄的數據文件地址和現有的數據文件位置不一樣。此時和下面第二中情況一樣。當然,此時也可以創建和原數據庫一樣的目錄結構(前提是要記得原數據庫的目錄結構),需要注意的就是參數文件中記錄的控制文件位置和控制文件中記錄的數據文件位置。

說明:我們需要清楚數據庫在打開的三個階段中,需要讀取的文件

Sql>startup nomount (此時讀取參數文件)

Sql>alter database mount (根據參數文件中記錄的控制文件地址,去讀取控制文件)

Sql>alter database open (根據控制文件中記錄的數據文件地址,讀取數據文件,打開數據庫)

二。只有數據文件備份,沒有控制文件和日志文件

由於只有數據文件備份,沒有控制文件和日志文件,此時只能采用重建控制文件來恢復數據庫。以下通過兩中方法來介紹如何通過重建控制文件來進行數據庫的恢復。

1)僅安裝數據庫軟件,通過新建Oracle服務,引用數據文件來創建一個實例。下面以實例名為demo為例進行說明。

1.創建存儲demo相關文件的目錄。即::各類文件的存放地址。

C:\documents and settings\mkdir c:\demo

C:\documents and settings\mkdir c:\demo\bdump

C:\documents and settings\mkdir c:\demo\udump

C:\documents and settings\mkdir c:\demo\cdump

C:\documents and settings\mkdir c:\demo\pfile

C:\documents and settings\mkdir c:\demo\create

C:\documents and settings\mkdir c:\demo\oradata

C:\documents and settings\mkdir c:\demo\oradata\demo (放置datafile、logfile、controlfile)

2.創建初始化參數文件(pfile)

此處pfile文件可以從其他能正常運行的數據庫上copy一個過來進行修改。(判斷其他正常運行的數據庫使用的是pfile還是spfile,如是pfile可以直接copy,如是spfile,則可根據spfile創建一個pfile文件)

Copy過來的pfile需要修改的地方:

background_dump_dest=c:\demo\bdump
core_dump_dest=c:\demo\cdump
user_dump_dest=c:\demo\udump
control_files=("c:\demo\oradata\demo\CONTROL01.CTL", "c:\demo\oradata\demo\CONTROL02.CTL", "c:\demo\oradata\demo\CONTROL03.CTL")
dispatchers="(PROTOCOL=TCP) (SERVICE=demoXDB)"(實例名)
dispatchers="(PROTOCOL=TCP) (SERVICE=demoXDB)"
db_domain=""
db_name=demo

3.創建Oracle服務和口令文件

C:\documents and settings\oradim — new —sid demo —intpwd Oracle

4.配置監聽和服務

用net manager 進行配置(demo實例的配置)

5.復制數據文件備份到指定的目錄下。此處為c:\demo\oradata\demo

6.重建controlfile C:\Documents and Settings\hefan>sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - Production on 星期一 12月 29 10:57:07 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn as sysdba
請輸入用戶名: system
請輸入口令:
已連接。
SQL> shutdown immediate
ORA-01507: 未安裝數據庫
Oracle 例程已經關閉。
SQL> startup nomount file= c:\demo\pfile\initdemo.ora
Oracle 例程已經啟動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> @d:\controlfile.sql
控制文件已創建
Controlfile.sql內容如下:(此處也可以直接在sql>下輸入以下內容進行創建controlfile)
CREATE CONTROLFILE REUSE DATABASE "demo" RESETLOGS NOARCHIVELOG
MAXLOGFILES 50
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 226
LOGFILE
GROUP 1 'c:\demo\oradata\demo\redo01.log' SIZE 50M,
GROUP 2 'c:\demo\oradata\demo\redo02.log' SIZE 50M,
GROUP 3 'c:\demo\oradata\demo\redo03.log' SIZE 50M
DATAFILE
'c:\demo\oradata\demo\system01.dbf',
'c:\demo\oradata\demo\odm01.dbf',
'c:\demo\oradata\demo\indx01.dbf',
'c:\demo\oradata\demo\tools01.dbf',
'c:\demo\oradata\demo\undotbs01.dbf',
'c:\demo\oradata\demo\users01.dbf',
'c:\demo\oradata\demo\xdb01.dbf',
'c:\demo\oradata\demo\cwmlite01.dbf',
'c:\demo\oradata\demo\drsys01.dbf',
'c:\demo\oradata\demo\example01.dbf'
CHARACTER SET zhs16gbk
說明:此時沒有日志文件,所以只能進行reserlogs,如果是有logfile,則此處不需要resetlogs,noresetlogs就可以

7.恢復數據庫

SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 523637 (? 12/23/2008 20:52:22 ??) ???? 1 ????
ORA-00289: ??: C:\Oracle9I\RDBMS\ARC00005.001
ORA-00280: ?? 523637 ???? 1 ???? # 5 ???
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質恢復已取消。
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 523637 (? 12/23/2008 20:52:22 ??) ???? 1 ????
ORA-00289: ??: C:\Oracle9I\RDBMS\ARC00005.001
ORA-00280: ?? 523637 ???? 1 ???? # 5 ???
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質恢復已取消。
SQL> alter database open resetlogs;
數據庫已更改。
Resetlog後要進行數據庫的全備,以前的備份不可用。

2)安裝數據庫,創建一個實例,用備份的數據文件代替新創建實例的數據文件。

1.刪除安裝目錄下所有的datafile、comtrolfile、logfile.(oradata目錄下的文件)

2.Copy備份的數據文件到oradata目錄下

3.重建控制文件 C:\Documents and Settings\hefan>sqlplus /nolog
SQL*Plus: Release 9.2.0.1.0 - Production on 星期一 12月 29 10:57:07 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn as sysdba

請輸入用戶名: system

請輸入口令:

已連接。

SQL> shutdown immediate
ORA-01507: 未安裝數據庫
Oracle 例程已經關閉。
SQL> startup nomount
Oracle 例程已經啟動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> @d:\controlfile.sql
控制文件已創建

4.恢復數據庫

SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 523637 (? 12/23/2008 20:52:22 ??) ???? 1 ????
ORA-00289: ??: C:\Oracle9I\RDBMS\ARC00005.001
ORA-00280: ?? 523637 ???? 1 ???? # 5 ???
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質恢復已取消。
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 523637 (? 12/23/2008 20:52:22 ??) ???? 1 ????
ORA-00289: ??: C:\Oracle9I\RDBMS\ARC00005.001
ORA-00280: ?? 523637 ???? 1 ???? # 5 ???
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質恢復已取消。
SQL> alter database open resetlogs;
數據庫已更改。

進行數據庫的全備份,resetlogs後以前的備份不可以用。

說明:此處新建實例的作用就是不需要創建參數文件、Oracle服務。(創建實例時,這些都已經創建好了,此時只需要用備份的數據文件代替新創建實例的數據文件)。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved