如何從完好的數據文件恢復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就可以 |