Oracle數(shù)據(jù)庫整機(jī)移植技術(shù)
2024-08-29 13:38:14
供稿:網(wǎng)友
1. 本文測(cè)試環(huán)境:
硬件環(huán)境:兩臺(tái)PC電腦,一臺(tái)機(jī)器名為A機(jī),另一臺(tái)機(jī)器名為B機(jī);
操作系統(tǒng)(OS):均為Window2000 advance server;
Oracle RDBMS:均為Oracle 9.2.0.1;
數(shù)據(jù)庫sid:要求A機(jī)與B機(jī)均為testdb.
2. 測(cè)試目的:
將A機(jī)現(xiàn)有數(shù)據(jù)庫系統(tǒng)快速移植到B機(jī)。
3. 測(cè)試要求:
硬件配置最好一致,假如A機(jī)與B機(jī)硬件配置不一致,最需要修改的地方是內(nèi)存配置,其原則是數(shù)據(jù)庫的總內(nèi)存配置要小于物理內(nèi)存;除此之外,對(duì)于CPU數(shù)量不一樣的情況,在只要求可恢復(fù)性的前提條件下,可以不做其它修改。
操作系統(tǒng)配置(OS):版本要求一致;對(duì)于B機(jī)上的硬盤邏輯分區(qū)至少要求物理文件存放置與A機(jī)對(duì)應(yīng)的同一個(gè)盤區(qū),如://A/D:/oracle/oradata/testdb/,//B/D:/oracle/oradata/testdb/,
Oracle軟件的安裝位置($ORACLE_HOME)可以不一致,如//A/G:/oracle/ora92/,//B/D:/oracle/ora92/.
Oracle RDBMS配置:要求版本必須一致,否則在B機(jī)上假如出現(xiàn)版本不兼容的問題將很難解決,例如查看A機(jī)上現(xiàn)在數(shù)據(jù)庫的版本為v9.2.0.1:
SQL>conn sys@myoracle as sysdba;
SQL> select * from v$version;
BANNER
Oracle9i EnterPRise Edition Release 9.2.0.1.0 - ProdUCtion
PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 – Production
所以要求B機(jī)上也要安裝Oracle v9.2.0.1版本的數(shù)據(jù)庫軟件。
4. 測(cè)試步驟:
1、在B機(jī)上作如下操作(為了盡量減少操作時(shí)間,最好在B機(jī)上將所有的預(yù)備工作都做好):
(1) 安裝Oracle軟件,但可以不用創(chuàng)建數(shù)據(jù)庫;
(2) 創(chuàng)建與A機(jī)上物理文件所在目錄相同的文件夾,通俗點(diǎn)講就是文件克隆(Clone file),例如:c:/>mkdir d:/oracle/oradata/testdb;
(3) 配置監(jiān)聽服務(wù),需要關(guān)心的文件主要有兩個(gè),分別是$ORACLE/network/admin/下的listener.ora、tnsnames.ora,Oracle連接時(shí)需要讀這兩個(gè)文件和sqlnet.ora文件。配置時(shí)最好采用“開始—>程序(P)—> Oracle - OraHome92—> Configuration and
Migration Tools—> Net Manager“在圖形界面下進(jìn)行配置,這同時(shí)可以生成上述的listener.ora、tnsnames.ora兩個(gè)文件,而且可以保證配置的準(zhǔn)確性;另外一種方法是直接從A機(jī)上的$ORACLE/network/admin/目錄直接copy這兩個(gè)文件至B機(jī)上的$ORACLE/network/admin/目錄,需要修改這兩個(gè)文件如下標(biāo)示:
A、 對(duì)于listener.ora文件:
# LISTENER.ORA Network Configuration File:
# F:/oracle/ora92/NETWORK/ADMIN/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRipTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = B)(PORT = 1521))
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = testdb.B)
(SID_NAME = testdb)
)
)
B、 對(duì)于tnsnames.ora文件:
# TNSNAMES.ORA Network Configuration File:
# F:/oracle/ora92/NETWORK/ADMIN/tnsnames.ora
# Generated by Oracle configuration tools.
MYORACLE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = B)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = testdb.B)
)
)
以上紅色標(biāo)記的地方表示需要改動(dòng),其實(shí)只將文件里的A主機(jī)名改成B主機(jī)名或者將A主機(jī)IP改成B主機(jī)IP就可以了。
(4) 創(chuàng)建實(shí)例服務(wù),由于前面只安裝了數(shù)據(jù)庫軟件,所以這時(shí)實(shí)例服務(wù)名還不存在,現(xiàn)在創(chuàng)建它(對(duì)于linux或Unix系統(tǒng),就沒有此步驟了):
c:/>oradim –NEW –SID testdb
這里直接將實(shí)例服務(wù)名創(chuàng)建成與A機(jī)上sid同名,為了保證下面的過程順利進(jìn)行,推薦按前述方法創(chuàng)建。
2、 復(fù)制A機(jī)上的數(shù)據(jù)庫物理文件。
關(guān)閉A機(jī)數(shù)據(jù)庫,對(duì)于已崩潰的系統(tǒng),當(dāng)然就沒有關(guān)閉數(shù)據(jù)庫這一步驟了:
SQL>conn sys@myoracle as sysdba
SQL>shutdown immediate
SQL>create pfile from spfile;
通過網(wǎng)絡(luò)或移動(dòng)存儲(chǔ)設(shè)備將A機(jī)上的物理文件:包括所有數(shù)據(jù)文件,重做日志文件,歸檔日
志文件,控制文件,密碼文件和剛才創(chuàng)建的初始化參數(shù)文件inittestdb.ORA,copy至B機(jī)上相對(duì)應(yīng)的與A機(jī)同名的目錄。例如:
copy A/D:/oracle/oradata/testdb/*.* B/D:/oracle/oradata/testdb
copy A/ F:/oracle/admin/*.* B/E:/oracle/admin/ ——這是日志文件目錄
copy A/ F:/oracle/ora92/network/admin/*.ORA B/ E:/oracle/ora92/network/admin/ (假如前面已經(jīng)配置好了監(jiān)聽,此步略過)
copy A/ F:/oracle/ora92/database/*.ORA B/ E:/oracle/ora92/database
這里只是舉例示范,實(shí)意是為了便于理解,但必須要經(jīng)過上面的copy步驟。注重上面
復(fù)制的文件包括警報(bào)日志文件目錄,也可以直接在B機(jī)上手工創(chuàng)建文件目錄,當(dāng)啟動(dòng)Oracle時(shí),Oracle會(huì)根據(jù)初始化參數(shù)里指定的目錄自動(dòng)創(chuàng)建警報(bào)日志文件。
修改從A機(jī)上copy過來的D:/oracle/ora92/database/inittestdb.ORA文件,將*.db_domain='A'修改為*.db_domain='B'就可以了。假如物理文件的位置在B機(jī)上發(fā)生了改變,則需要修改這個(gè)文件里相應(yīng)的參數(shù),但建議不要作任何改動(dòng),以減少操作失敗的可能性。
3、 啟動(dòng)B機(jī)上的數(shù)據(jù)庫。
經(jīng)過上面的操作,現(xiàn)在B機(jī)上實(shí)際上已經(jīng)有了一個(gè)完整的數(shù)據(jù)庫了。現(xiàn)在我們來啟動(dòng)B機(jī)上的數(shù)據(jù)庫。看看是否能成功運(yùn)行:
(1) 啟動(dòng)監(jiān)聽服務(wù):
c:/>lsnrctl start
(2) 啟動(dòng)實(shí)例服務(wù):
c:/>oradim -startup -sid testdb
(3) 啟動(dòng)數(shù)據(jù)庫:
c:/>sqlplus /nolog
SQL>conn sys@myoracle as sysdba ——這里sys的密碼與A機(jī)上sys賬戶密碼相同
——因?yàn)槎际鞘褂玫耐粋€(gè)密碼文件。
SQL>startup ——現(xiàn)在可以打開數(shù)據(jù)庫使用了,假如正常的情況下,上面連接時(shí)就
——可以啟動(dòng)數(shù)據(jù)庫了。
至此,一個(gè)數(shù)據(jù)庫的克隆(Clone DB)成功完成。對(duì)于上面的操作,下面作個(gè)總結(jié),以便對(duì)Oracle的物理文件與Oracle系統(tǒng)之間的關(guān)系有一定程度的理解或熟悉:
1、 Oracle數(shù)據(jù)庫物理文件與Oracle軟件(這里的軟件概念僅限于相關(guān)的命令或應(yīng)用程序操作,如sqlplus,lsnrctl等命令)相對(duì)獨(dú)立存在,兩者之間只存在軟件命令或應(yīng)用程序?qū)ξ锢砦募M(jìn)行操作的關(guān)系;
2、 Oracle軟件命令或應(yīng)用程序假如要對(duì)數(shù)據(jù)庫物理文件進(jìn)行讀取,通常需要在Oracle默認(rèn)安裝的文件位置去查找,最主要的是密碼文件與初始化參數(shù)文件,當(dāng)然這兩個(gè)文件所在目錄也可以改變,但使用默認(rèn)位置就可以了,因?yàn)閷?duì)于我們的需求也僅限于默認(rèn)位置就可以了;
3、 對(duì)于是否有數(shù)據(jù)丟失,那要看A機(jī)上數(shù)據(jù)是否完整?因?yàn)楝F(xiàn)在B機(jī)上的數(shù)據(jù)庫是A機(jī)數(shù)據(jù)庫的完整克隆(Clone),所以最后A機(jī)數(shù)據(jù)庫與B機(jī)數(shù)據(jù)庫完全一樣,當(dāng)然前提是所有物理文件沒有受到損壞;強(qiáng)烈推薦將A機(jī)上的數(shù)據(jù)庫置于歸檔模式,這樣Oracle可以最大程度保證數(shù)據(jù)不被丟失;
4、 以上測(cè)試可以作為數(shù)據(jù)庫倒騰到不同機(jī)器上的一個(gè)可選方案,同時(shí)對(duì)原來機(jī)器上的數(shù)據(jù)庫不會(huì)有損壞的可能,因?yàn)樯厦娌襟E對(duì)原數(shù)據(jù)庫沒有修改操作;除非從A機(jī)復(fù)制物理文件至B機(jī)上時(shí),采用的是cut命令而丟失了物理文件;
5、 整個(gè)持續(xù)過程需要花費(fèi)的時(shí)間較短:shutdown immediate時(shí)間,加上copy物理文件的時(shí)間,修改初始化參數(shù)的時(shí)間,與startup B機(jī)數(shù)據(jù)庫的時(shí)間。