標籤:
因更換伺服器需要將Oracle資料庫轉移到另外台Oracle中。
說明:
1、測試環境為:windows server2003 和 oracle 10g.
2、2台伺服器安裝的程式目錄一樣,資料目錄不一樣。
特別借簽了Afshen兄弟發的實踐將oracle冷備份恢複到另外一個資料庫執行個體中操作文章。但是對於新手來說沒有詳細說明,且我的操作有點點差異。另外我是新手,只知道工作完成,但是不知道是否此操作是否對於資料庫使用存在何影響,還需要後期開發使用在知道,希望能給大家提供對比作為操作中的參考。(因時間倉促未俯圖)
1)在A資料庫伺服器操作:
將需要轉移的資料庫A冷備份,冷備份,我很簡單。
開始->運行:sqlplus
sqlplus>conn SourDB sys as sysdba
sqlplus>shutdown immediate \\關閉資料庫執行個體
在提示後ORACLE 常式已經關閉後,將對應A資料庫中的e:\Oracle\oradata\SourDB資料庫目錄全部拷貝出來。
我的資料庫目錄內含REDO01.LOG 、REDO02.LOG、REDO03.LOG,SYSAUX01.DBF,SYSTEM01.DBF,TEMP01.DBF,UNDOTBS01.DBF,USERS01.DBF,ZJTEST.DBF
CONTROL01.CTL,CONTROL02.CTL,CONTROL03.CTL
疑惑:這3個控制檔案後面發現沒用上,新資料庫重建控制檔案就行了。因新接觸不瞭解,哪位同學知道的,解疑下。
2)在B資料庫(執行個體DestDB)
我的程式安裝在x:\oracle\product\10.1.0\db_1\
資料目錄在x:\oracle\database\DestDB(無子目錄)
a、備份資料庫B的控制檔案
開始->運行:sqlplus
sqlplus>conn DetDB sys as sysdba
sqlplus>alter database backup controlfile to trace
sqlplus>show parameter spfile; //顯示spfile路徑
sqlplus>create pfile from spfile; //備份資料庫B的控制檔案,產生的檔案在x:\oracle\product\10.1.0\db_1\database\下的INITDestDB.ORA,備份吧。
b、sqlplus>shutdown immediate \\關閉資料庫執行個體
刪除資料目錄在x:\oracle\database\DestDB的目錄下的資料檔案、控制檔案和記錄檔,反正我是目錄下的都刪除了。將資料庫A備份的sourDB的*.log、*.DBF複製進去。
刪除資料庫B中的,x:\oracle\product\10.1.0\db_1\database\SPFILEDestDB.ORA控制檔案
修改INITDestDB.ORA檔案,刪除*.control_files對應的字串
c、啟動資料庫B到nomount狀態
開始->運行:sqlplus /nolog
sql>conn DestDB as sysdba
sql>startup nomount
ORACLE 常式已經啟動。
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 144964076 bytes
Database Buffers 25165824 bytes
Redo Buffers 1048576 bytes
\\使用下面的語句產生資料庫B的新的控制檔案,將DestDB改掉目錄的資料庫名就行了。
sql>CREATE CONTROLFILE SET DATABASE "DestDB" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 454
LOGFILE
GROUP 1 ‘x:\oracle\database\DestDB\REDO01.LOG‘ SIZE 10M,
GROUP 2 ‘x:\oracle\database\DestDB\REDO02.LOG‘ SIZE 10M,
GROUP 3 ‘x:\oracle\database\DestDB\REDO03.LOG‘ SIZE 10M
DATAFILE
‘x:\oracle\database\DestDB\SYSTEM01.DBF‘,
‘x:\oracle\database\DestDB\UNDOTBS01.DBF‘,
‘x:\oracle\database\DestDB\SYSAUX01.DBF‘,
‘x:\oracle\database\DestDB\USERS01.DBF‘,
‘x:\oracle\database\DestDB\ZJTEST.DBF‘
CHARACTER SET ZHS16GBK;
關閉資料庫
sql>shutdown immediate
d、添加(參考備份的initsourDB.ORA)
*.control_files=‘x:\oracle\database\DestDB\control01.ctl‘,‘x:\oracle\database\DestDB\control02.ctl‘,‘x:\oracle\database\DestDB\control03.ctl‘
新的控制檔案,產生到目錄x:\oracle\database\DestDB,修改x:\oracle\product\10.1.0\db_1\database\下的initsourDB.ORA,我看到我的目錄內產生了3個控制檔案,所以加了3個。
e、指定pfile參數啟動,並產生spfile,完成恢複工作。
sql>startup pfile="x:\oracle\product\10.1.0\db_1\database\initsourDB.ORA";
ORACLE 常式已經啟動。
Total System Global Area 171966464 bytes
Fixed Size 787988 bytes
Variable Size 144964076 bytes
Database Buffers 25165824 bytes
Redo Buffers 1048576 bytes
資料庫裝載完畢。
ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項
SQL> alter database open resetlogs;
資料庫已更改。
SQL> create spfile from pfile;
檔案已建立。
SQL> select count(*) from dba_users;
COUNT(*)
----------
30
SQL> select count(*) from dba_users where username=‘test‘;
COUNT(*)
----------
文章出處:飛諾網(www.diybl.com):http://www.diybl.com/course/7_databases/oracle/oraclejs/20110814/558381.html
1、首先安裝一個全新的Oracle,包括服務名、SID,安裝目錄應最好與原來的ORACLE目錄一致。
2、刪除安裝目錄下所有的datafile、logfile.(oradata目錄下的檔案)
3、Copy原來的資料檔案到oradata目錄下,包括系統資料檔案等。
4、alter database backup controlfile to trace; 備份當前資料庫控制檔案,控制檔案一般備份到D:\oracle\PRoduct\10.2.0\admin\bstest\udump下,請注意最新一個就是了。
刪除原控制檔案,重新建立一個控制檔案,請注意修改各個路徑的位置,如下:
CREATE CONTROLFILE SET DATABASE "TEST" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\REDO01.LOG‘ SIZE 50M,
GROUP 2 ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\REDO02.LOG‘ SIZE 50M,
GROUP 3 ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\REDO03.LOG‘ SIZE 50M
-- STANDBY LOGFILE
DATAFILE
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\SYSTEM01.DBF‘,
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\UNDOTBS01.DBF‘,
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\SYSAUX01.DBF‘,
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\USERS01.DBF‘,
‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\BSTEST\TEST.DAT‘
CHARACTER SET ZHS16GBK
;
注意修改資料檔案的路徑,如果是原資料檔案,加上你原來所有的資料檔案路徑,如紅色則是我原來的資料檔案。
11、重啟,啟動到startup mount;然後
執行recover database;成功,
再執行alter database open;開啟成功了。
12、現在已基本成功了,但是經過這樣處理,為了安全起見,
最好用EXP先將資料全部匯出,然後再重新安裝ORACLE,然後再用IMP重新匯入。
而當我匯出時卻出現錯誤:提示暫存資料表空間為空白。
用select name from v$tempfile;查看,確實為空白,則:
如temp01.dbf已存在,則如下:
alter tablespace temp add tempfile ‘D:\oracle\product\10.2.0\oradata\bstest\temp01.dbf‘
否則:
alter tablespace temp add tempfile ‘D:\oracle\product\10.2.0\oradata\bstest\temp01.dbf‘ size 10M;
再用EXP匯出,成功!
還是打不開。出現以下錯誤:
alter database open RESETLOGS
*
ERROR 位於第 1 行:
ORA-01092: ORACLE 常式終止。強行中斷連線
10、 將UNDO日誌改為手動模式:
alter system set undo_management=‘manual‘ scope=spfile;
5、startup nomount;啟動到nomount狀態,然後執行以上控制檔案重建語句。
6、執行recover database using backup controlfile until cancel;
輸入cancel斷行符號,後出現錯誤。
7、alter database open resetlogs;執行後出現以下錯誤。
ORA-01194: 檔案1需要更多的恢複來保持一致性
ORA-01110: 資料檔案 1: ‘D:\ORACLE\ORADATA\ZQKH\SYSTEM01.DBF‘
8、#系統檔案出錯,看到“一致性”自然想到 _allow_resetlogs_corruption的隱含命令
alter system set "_allow_resetlogs_corruption"=true scope=spfile;
9、alter database open RESETLOGS;
將oracle冷備份恢複到另外一個資料庫執行個體中