Linux環(huán)境下oracle9i的Dataguard配置
2024-08-29 13:35:20
供稿:網(wǎng)友
 
             環(huán)境: os: linux 9 Oracle: oracle9i PRimary: 1.1.1.1 standby: 1.1.1.2 (主副主機都是兩臺普通的pc主機) 第一部分 oracle9i 在linux9上的安裝 本來我不想寫這方面的東東,但是對比oracl9i在solaris下和在linux下安裝,oracle9i 在linux9上的安裝真的是要麻煩很多,下面我把我碰到的問題(似乎也是大部分oracle初學者安裝時碰到的題)簡要的說一下,oracle9i 在linux9上的安裝也折騰了我好幾個月,沒辦法,我太笨了。 1)運行runinstaller的時候報錯。             -bash-2.05b$ ./runInstaller -bash-2.05b$ Initializing java Virtual Machine from /tmp/OraInstall2005-01-20_06-39-06PM/jre/bin/java. Please wait... /tmp/OraInstall2005-01-20_06-39-06PM/jre/bin/i386/native_threads/java: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No sUCh file or Directory Oracle Net configuration Assistant  Oracle Database configuration Assistant        Agent configuration Assistant      三個工具的details錯誤信息都是: /home/oracle/jre/1.1.8/bin../lib/i686/ native_threads/libzip.so :symbol errno, version GLIBC_2.0 not definded in file libc.so.6 with link time reference(libzip.so) unable to initialize threads: cannot find class java/lang/Thread Could not create java VM 解決方法: 在運行runInstaller之前做下面的步驟。 eXPort LD_ASSUME_KERNEL=2.4.19 ignore your kernal version 下載文件libcwait.c FTP://people.redhat.com/drepper/libcwait.c (通過IE無法下載的話,就用命令行) 用gcc -shared -o libcwait.so -fpic -O2 libcwait.c 進行編譯然后export LD_PRELOAD=/$path/libcwait.so 上面的方法能使Oracle Net configuration Assistant , Oracle Database configuration Assistant 安裝成功。 修復(fù)Agent configuration Assistant不能配置成功的方法:請參考chinaunix上的《在RHAS3上成功安裝Oracle9204》。 運行runInstaller之后,出現(xiàn)安裝組件的選擇結(jié)果,這時點“Install”,開始安裝,復(fù)制文件,進度條在一點一點的增加,當安裝并link 完后,出現(xiàn)配置工具界面,agent服務(wù)不能配置成功,忽略不用管,在下面修復(fù)。DBCA,NETCA,HTTP都正確配置完畢哦。 呵呵。下面開始修復(fù)錯誤。其實要是把各個界面抓取下來就更好了。 6、安裝p3238244_9204_LINUX.zip補丁 此補丁也是從http://metalink.oracle.com下下載,同時要下載一個opatch軟件包:p2617419_220_GENERIC.zip,它主要是用來悠agent服務(wù)不能啟動的錯誤。 
                         過程如下:             [quote:864939f94a]su - oracle  $ cp p2617419_210_GENERIC.zip /tmp  $ cd /tmp  $ unzip p2617419_210_GENERIC.zip  $ export PATH=$PATH:/tmp/OPatch  $ export PATH=$PATH:/sbin        # the patch needs "fuser" which is located in /sbin  $ unzip p3238244_9204_LINUX.zip  $ cd 3238244  $ opatch apply  :864939f94a]補丁修復(fù)完成,需要relinked一個.mk文件。  $ cd $ORACLE_HOME/network/lib        $ make -f ins_oemagent.mk install      現(xiàn)在在運行agentctl start,看是不是可以成功運行agent服務(wù)了啊,可以用stop、status來停止此服務(wù)或者檢查服務(wù)的狀態(tài)。 在這個成功之后,居然不能啟動Oracle,說是不能找到初始化文件,沒辦法,我用dbca先刪除了原來安裝時建立的庫,再重新建立了數(shù)據(jù)庫。    7、運行dbca來創(chuàng)建數(shù)據(jù)庫。呵呵,一路暢通,完成數(shù)據(jù)庫的安裝。 希望你也能成功安裝。                                                                                             申明一點,我在9i沒配置好Agent configuration Assistant,應(yīng)該在linux9i環(huán)境里按照上面的步驟也能配置好。 運行runInstaller后,安裝界面出來出現(xiàn)亂碼 export LANG=en_us 再運行runInstaller (這是最簡單實用的辦法) 報/etc/oratab 錯誤 假如在機器上以前安裝過,再一次安裝的時候假如報/etc/oratab 錯誤。請將/etc/oratab 清空(刪除也可) cp /dev/null /etc/oratab (4)然后開始建庫,當建庫到46%時會出現(xiàn)共享內(nèi)存問題,   ORA-27123: unable to attach to shared memory segment 這時需要給內(nèi)核指定內(nèi)存,可以:   echo 4294967295 >/proc/sys/kernel/shmmax 或者編輯/etc/sysctl.conf   kernel.shmmax=4294967295 這樣就可以數(shù)據(jù)庫的安裝。 運行:要啟動oracle要先運行數(shù)據(jù)庫監(jiān)聽程序:lsnrctl start 關(guān)閉:lsnrctl stop 運行oemapp console可以打開oracle企業(yè)治理器工具,還有一些錯誤,可能需要修改/etc/hosts,/etc/sysctl.conf,請大家在Google上搜一下按照網(wǎng)友提示的方法進行修改。 另外主副主機的目錄設(shè)置成一樣。都將oracle用戶主目錄設(shè)為/home/oracle.主副主機的數(shù)據(jù)庫名字都設(shè)為oracle,實例名也都設(shè)為一樣,都設(shè)為oracle(申明一點,是否必須將主副主機的數(shù)據(jù)庫名字實例名都設(shè)為相同,我曾在cu上發(fā)過貼子問過,似乎大家都說不需要,但我們這的dba說是必須,反正我在這里設(shè)的是相同。 第二步:Dataguard配置 首先將主副兩主機都設(shè)為歸檔模式。 1. 主節(jié)點備份并生成備用數(shù)據(jù)庫控制文件 登陸主節(jié)點,進行數(shù)據(jù)庫備份,并生成備用數(shù)據(jù)庫控制文件             [oracle@primary]$ sqlplus "/ as sysdba" SQL> startup SQL> shutdown immediate SQL> exit [oracle@primary]pwd /home/oracle [oracle@primary]$ ls admin  dictionary.ora  jre  oradata  oraInventory  oui  product  soft [oracle@primary]tar -cvf oradata.tar oradata [oracle@primary]$ ls -l *.tar -rw-r--r--    1 oracle   dba      576512000 Aug 16 10:22 oradata.tar [oracle@primary]$ sqlplus "/ as sysdba" SQL> startup SQL> archive log list; Database log mode              Archive Mode Automatic archival             Enabled   Archive destination            /home/oracle/oradata/primary/archive Oldest online log sequence     88 Next log sequence to archive   90 Current log sequence           90 SQL> alter database create standby controlfile as '/home/oracle/standby.ctl'; Database altered. SQL> exit       [oracle@primary]      3. 登陸備用節(jié)點(standby),ftp獲得primary主機的數(shù)據(jù)庫文件(即oradata.tar文件)、備用控制文件(/home/oracle/standby.ctl) ,口令文件( $ORACLE_HOME/dbs/下的orapworacle)傳到standby里的相應(yīng)位置。 
                            具體步驟: 3.1 在standby的/home/oracle/oradata下,原來有一個oracle的文件夾(里面是該主機下的dbf,redolog文件),再新建一個primary文件夾。                                                                                            將primary主機的oradata.tar解開的文件全部直接(即primary不要再有文件夾)放到primary下,將剛生成的備用控制文件(/home/oracle/standby.ctl)也放到primary下。 3.2 在standby的ORACLE_HOME/dbs/下,先將以前的orapworacle備份一下(改個名字即可),再將primary的$ORACLE_HOME/dbs/下的orapworacle 文件ftp放到standby的ORACLE_HOME/dbs/下. 說明一下,我在查閱eygle的大作及很多人的相關(guān)文章,都沒有提到這一點,但假如沒做這一步的話,再后面的啟動備用數(shù)據(jù)庫的時候,即在 [oracle@eygle primary]$ sqlplus "/ as sysdba" SQL> startup nomount; SQL> alter database mount standby database; SQL> alter database recover managed standby database disconnect from session; 這一步時就會報ORA-01991 錯誤,說是Invalid passwd file.詢問我們的dba,說是必須要用primary的orapworacle來替換standby的. 我試過,這樣做了后就OK了。 所以我這在這里就把primary的orapworacle來替換standby的orapworacl也當作一步必須步驟,但我真的不能肯定這一步是否是必須的,假如不是必須的,為何我做這一步,總會報錯。假如是必須的,為何eygle和其他大牛的大作里都沒有提到這一步,難道是因為這個太簡單嗎?? 我真的是有些迷惑。假如哪位大牛看到這,請給我一個肯定的回答,我不勝感激。 在standby主機的$oracle/home/admin下原來有oracle目錄。現(xiàn)在新建primary目錄,再在primary目錄下新建bdump,cdump,udump. Primary的參數(shù)文件             oracle@primary_andy $cat  .bash_profile # .bash_profile # Get the aliases and functions #if [ -f ~/.bashrc ]; then #       . ~/.bashrc #fi # User specific environment and startup programs #export BASH_ENV=$HOME/.bashrc PATH=$PATH:/home/oracle/product/9.2.0/bin:$oracle_home/jre/bin:/opt/SUNWspro/bin:/usr/bin:/usr/ccs/bin:/usr/ucb:/etc:/usr/local/bin:/usr/bin/saved: export PATH unset USERNAME ORACLE_OWNER=oracle ORACLE_BASE=/home/oracle export ORACLE_BASE ORACLE_HOME=/home/oracle/product/9.2.0 export ORACLE_HOME LANG= LC_ALL= ORACLE_SID=oracle export ORACLE_SID TNS_ADMIN=/homehttp://oracle.chinaitlab.com/config/9.2.0; export TNS_ADMIN NLS_LANG=american_america.ZHS16GBK; export NLS_LANG #ORA_NLS33=$Oracle_HOME/ocommon/nls/admin/data; export ORA_NLS33 CLASSPATH=$Oracle_HOME/JRE:$Oracle_HOME/jlib:$Oracle_HOME/rdbms/jlib:/opt/j2sdk_nb/j2sdk1.4.2/bin export CLASSPATH TMPDIR=/tmp;export TMPDIR umask 022 LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/lib/tls:/lib/i686:/usr/openwin/lib:/usr/dt/lib export LD_LIBRARY_PATH export LD_PRELOAD=/home/oracle/libcwait.so; export LD_ASSUME_KERNEL=2.4.19; DISPLAY=1.1.1.3:0.0;export DISPLAY; export PS1="/u@/H $" #cat initoracle.ora_primary *.aq_tm_processes=1 *.background_dump_dest='/home/oracle/admin/oracle/bdump' *.compatible='9.2.0.0.0' *.control_files='/home/oracle/oradata/oracle/control01.ctl','/home/oracle/oradata/oracle/c ontrol02.ctl','/home/oracle/oradata/oracle/control03.ctl' *.core_dump_dest='/home/oracle/admin/oracle/cdump' *.db_block_size=8192 *.db_cache_size=33554432 *.db_domain='' *.db_file_multiblock_read_count=16 *.db_name='oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=oracleXDB)' 
                         *.fast_start_mttr_target=300 *.hash_join_enabled=TRUE *.instance_name='oracle' *.java_pool_size=83886080 *.job_queue_processes=10 *.large_pool_size=16777216 *.log_archive_dest_1='LOCATION=/home/oracle/oradata/archivelog/' *.log_archive_dest_2='service=standby mandatory reopen=60' *.log_archive_dest_state_1='ENABLE' *.log_archive_format='log_%t_%s.arc' *.log_archive_start=TRUE *.open_cursors=300 *.pga_aggregate_target=25165824 *.processes=150 *.query_rewrite_enabled='FALSE' *.remote_login_passWordfile='EXCLUSIVE' *.shared_pool_size=83886080 *.sort_area_size=524288 *.star_transformation_enabled='FALSE' *.timed_statistics=TRUE *.undo_management='AUTO' *.undo_retention=10800 *.undo_tablespace='UNDOTBS1'       *.user_dump_dest='/home/oracle/admin/oracle/udump'         修改standby主機的initoracle.ora文件(先備份),我的initoracle.ora如下,供參考 
            *.aq_tm_processes=1 *.background_dump_dest='/home/oracle/admin/primary/bdump' *.compatible='9.2.0.0.0' *.control_files='/home/oracle/oradata/primary/standby.ctl' *.core_dump_dest='/home/oracle/admin/primary/cdump' *.db_block_size=8192 *.db_cache_size=33554432 *.db_domain='' *.db_file_multiblock_read_count=16 *.db_name='oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=oracleXDB)' *.fast_start_mttr_target=300 *.hash_join_enabled=TRUE *.instance_name='oracle' *.java_pool_size=83886080 *.job_queue_processes=10 *.large_pool_size=16777216 *.open_cursors=300 *.pga_aggregate_target=25165824 *.processes=150 *.query_rewrite_enabled='FALSE' *.remote_login_passwordfile='EXCLUSIVE' *.shared_pool_size=83886080 *.sort_area_size=524288 *.star_transformation_enabled='FALSE' *.timed_statistics=TRUE *.undo_management='AUTO' *.undo_retention=10800 *.undo_tablespace='UNDOTBS1' *.user_dump_dest='/home/oracle/admin/primary/udump' *.log_archive_format=log_%t_%s.arc *.log_archive_start=TRUE *.STANDBY_FILE_MANAGEMENT=AUTO *.log_archive_dest_1='LOCATION=/home/oracle/oradata/archivelog/' *.log_archive_dest_state_1 = ENABLE *.fal_server='primary' *.fal_client='standby' *.DB_FILE_NAME_CONVERT=("/home/oracle/oradata/oracle","/home/oracle/oradata/primary")   ----(主輔數(shù)據(jù)庫數(shù)據(jù)文件相互轉(zhuǎn)換的目錄) *.STANDBY_FILE_MANAGEMENT=AUTO  即可實現(xiàn)重命名主庫的數(shù)據(jù)文件!! *.LOG_FILE_NAME_CONVERT=("/home/oracle/oradata/archivelog","/home/oracle/oradata/archivelog")   ----(主輔數(shù)據(jù)庫聯(lián)機日志redolog相互轉(zhuǎn)換的目錄) *.STANDBY_ARCHIVE_DEST=/home/oracle/oradata/archivelog                          ----(從主數(shù)據(jù)庫產(chǎn)生的archivelog傳到輔數(shù)據(jù)庫的目錄)      4. 配置主節(jié)點(primary主機上)的tnsnames.ora文件             primary=(description=  (address=  (protocol=tcp)  (port=1521)  (host=1.1.1.1))  (connect_data=  
                         (SID=oracle))) standby=(description=  (address=  (protocol=tcp)  (port=1521)  (host=1.1.1.2))  (connect_data=        (SID=oracle)))      同樣,在副節(jié)點(standby) 的tnsnames.ora文件。5. 在副節(jié)點(standby)上配置listener.ora文件, 添加監(jiān)聽服務(wù)standby_listener,在相應(yīng)的節(jié)里添加有關(guān)的內(nèi)容:             SID_LIST_LISTENER =   (SID_LIST =     (SID_DESC =         (SID_NAME = oracle)         (GLOBAL_DBNAME = oracle)       (ORACLE_HOME = /home/oracle/oradata)     )   ) LISTENER =   (DESCRIPTION_LIST =      (DESCRIPTION =       (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))     )         )      在主副庫上啟動lsnrctl, -bash-2.05b$ lsnrctl LSNRCTL>start # 啟動監(jiān)聽服務(wù)    6.在主備節(jié)點用tnsping測試網(wǎng)絡(luò)連通性 在primary機上 -bash-2.05b$ tnsping primary -bash-2.05b$ tnsping standby 在standby機上 -bash-2.05b$ tnsping primary -bash-2.05b$ tnsping standby 7. 啟動副數(shù)據(jù)庫 sql> startup nomount; SQL> alter database mount standby database; Database altered. SQL> alter database recover managed standby database disconnect from session; Database altered. 8. 在主節(jié)點設(shè)置歸檔路徑 SQL> alter system set log_archive_dest_2='service=standby mandatory reopen=60'; System altered. 定義了主庫向副庫傳輸日志。 # 定義歸檔到備用庫,強制歸檔,重試時間60秒。 # 假如定義為可選狀態(tài)(optional),那么在歸檔失敗后不會再次嘗試歸檔的。定義 # 為madatory狀態(tài)后,假如本次歸檔失敗,則在歸檔下一個日志時會再次嘗試。 SQL> alter system switch logfile; System altered. SQL> / System altered. SQL> 在備用節(jié)點觀察日志: [oracle@eygle bdump]$ tail -f alert_primary.log MRP0: Background Managed Standby Recovery process started Starting datafile 1 recovery in thread 1 sequence 90 Datafile 1: '/opt/oracle/oradata/primary/system01.dbf' Starting datafile 2 recovery in thread 1 sequence 90 Datafile 2: '/opt/oracle/oradata/primary/undotbs01.dbf' ………………………… -bash-2.05b$ mkdir /home/oracle/oradata/oracle/stdarch ------------------------------------------------------- 9.主輔數(shù)據(jù)庫的切換(停止主數(shù)據(jù)庫,啟用備用數(shù)據(jù)庫) 修改primary的參數(shù)文件initoracle.ora(先做好備份) 增加 *.standby_archive_dest='/home/oracle/oradata/standbyarch' *.fal_server='standby' *.fal_client='primary' *.DB_FILE_NAME_CONVERT=("/home/oracle/oradata/primary","/home/oracle/oradata/oracle") *.LOG_FILE_NAME_CONVERT=("/home/oracle/oradata/archivelog","/home/oracle/oradata/archivelog") *.STANDBY_FILE_MANAGEMENT='AUTO' 刪除 log_archive_dest_2參數(shù) 修改standby的參數(shù)文件initoracle.ora(先做好備份) 增加 *.log_archive_dest_2='service=primary mandatory reopen=60' *.log_archive_dest_state_2='ENABLE' 刪除 *.STANDBY_ARCHIVE_DEST=/home/oracle/oradata/archivelog *.fal_server='standby' *.fal_client='primary' *.DB_FILE_NAME_CONVERT=("/home/oracle/oradata/primary","/home/oracle/oradata/oracle") 
                         *.LOG_FILE_NAME_CONVERT=("/home/oracle/oradata/archivelog","/home/oracle/oradata/archivelog") *.STANDBY_FILE_MANAGEMENT=AUTO    在primary主機上執(zhí)行 SQL> alter database commit to switchover to physical standby with session shutdown ; Database altered. 察看primary主機上的后臺日志 ……………………………. SQL> shutdown immediate ORA-01507: database not mounted ORACLE instance shut down. 以備用模式(standby)啟用主數(shù)據(jù) SQL> create spfile from pfile; SQL> startup nomount; SQL>show parameter standby_file_management; SQL> alter database mount standby database; Database altered. 打開備用數(shù)據(jù)庫(在standby主機上執(zhí)行)             [oracle@standby oracle]$ sqlplus "/ as sysdba" SQL> alter database commit to switchover to primary with session shutdown ; Database altered. SQL> shutdown immediate;      ORA-01507: database not mounted ORACLE instance shut down SQL>create spfile from pfile; SQL> startup;         …… Database mounted. Database opened. SQL> select SEQUENCE#,GROUP#,STATUS from v$log; SQL> select sequence#,group#,status from v$log;  SEQUENCE#     GROUP# STATUS ---------- ---------- --------------------------------         72          1 INACTIVE         73          2 INACTIVE         74          3 CURRENT SQL> alter system switch logfile; System altered. SQL> select sequence#,group#,status from v$log;  SEQUENCE#     GROUP# STATUS ---------- ---------- --------------------------------         75          1 CURRENT         73          2 INACTIVE               74          3 ACTIVE      在primary主機上執(zhí)行: SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; Database altered. 在primary主機上觀察日志應(yīng)用情況 [oracle@primary bdump]$ tail -f alert_oracle.log Starting datafile 2 recovery in thread 1 sequence 93 Datafile 2: '/opt/oracle/oradata/primary/undotbs01.dbf' Starting datafile 3 recovery in thread 1 sequence 93 Datafile 3: '/opt/oracle/oradata/primary/users01.dbf' ………………………………………………. Media recover 10.現(xiàn)在可做一個測試,在standby主機上進行數(shù)據(jù)修改(standby主機現(xiàn)在做primary) SQL> create table t as select * from dba_users; Table created. SQL> alter system switch logfile; System altered.    在從庫上(primary主機上)以read only打開數(shù)據(jù)庫,                                                                                            執(zhí)行查詢 SQL> select username from t; select username from t * ERROR at line 1: ORA-01219: database not open: queries allowed on fixed tables/views only SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; Database altered. SQL> ALTER DATABASE OPEN READ ONLY; Database altered. SQL> select username from t; 
                         USERNAME ------------------------------ SYS SYSTEM DBSNMP OUTLN WMSYS SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; Database altered. 常見問題 至此,主副的配置已基本完成,可做以下實驗來驗證配置的準確性。 1. 在主庫上新建一個表,看修改時候能馬上傳到副庫上; 2. 在主庫上新建一個表空間,新增加一個datafile,看修改時候能馬上傳到副庫上(應(yīng)該是只要在副庫上執(zhí)行恢復(fù)模式,就能在副庫上看到新建的表空間; 3. 在主庫上新建一個臨時表空間,rename datafile 均不能應(yīng)用到副庫上; 4. 應(yīng)當實時察看standby庫的alert文件,就能清楚明了地知道主副更新的情況; 5. 關(guān)于啟動關(guān)閉順序。 啟動的時候,先從庫的listener,再啟動從庫,再啟動主庫的listener,再主庫。 關(guān)閉的時候,先關(guān)閉主庫,再啟動從庫。 6. 8i副數(shù)據(jù)庫切換為主的話,將無法再切為副。主數(shù)據(jù)庫也是! 也就是說,只能完成一次切換,這叫failover!9i可實現(xiàn)主副數(shù)據(jù)庫任意切換,這叫switchover 7. 察看主機當前的運行狀態(tài): SQL> select name,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database; NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE --------- ---------- -------------------- ---------------- PRIMARY MOUNTED MAXIMUM PERFORMANCE PHYSICAL STANDBY 8.查看主數(shù)據(jù)庫日志是否全部傳送到副數(shù)據(jù)庫,可查看v$archive_gap,更簡單的方法是查看各自主機的日志歸檔目錄的日志序號即可。    11. 常用的一些方法: 可在副數(shù)據(jù)庫上運行一些腳本,確保主數(shù)據(jù)庫上的更新能及時在副數(shù)據(jù)庫上得到實現(xiàn)。可將以下腳本放在crontab表中。                                                                                             oracle@standby $cat refresh (刷新腳本) ORACLE_SID=oracle ORACLE_HOME=/home/oracle/product/9.2.0 export ORACLE_SID ORACLE_HOME DATE=`date '+%Y%m%d'` touch /home/oracle/refresh_$DATE.log $ORACLE_HOME/bin/sqlplus /nolog << EOF spool /home/oracle/refresh_$DATE.log connect sys/abc123 as sysdba shutdown immediate; quit EOF $ORACLE_HOME/bin/sqlplus /nolog << EOF2 spool /home/oracle/refresh_2_$DATE.log connect sys/abc123 as sysdba startup nomount pfile=$ORACLE_HOME/dbs/initoracle.ora; alter database mount standby database; alter database set standby database to maximize performance; alter database recover managed standby database disconnect from session; spool off EOF2 oracle@standby $cat readonly (更新腳本) #!/bin/sh ORACLE_SID=oracle ORACLE_HOME=/home/oracle/product/9.2.0 export ORACLE_SID ORACLE_HOME $ORACLE_HOME/bin/sqlplus /nolog << EOF spool /home/oracle/refresh-read.log connect sys/abc123 as sysdba rem change from recover mode to read-only alter database recover managed standby database cancel; alter database open read only ; spool off EOF switchover過程。    12.把數(shù)據(jù)庫切換回到主節(jié)點 先將standby此時的initoracle.ora恢復(fù)為以前是standby時的參數(shù)。                                                                                             在主節(jié)點(standby主機上) SQL> alter database commit to switchover to physical standby; Database altered. SQL> shutdown immediate ORA-01507: database not mounted statORACLE instance shut down. SQL> startup nomount pfile=/home/oracle/product/9.2.0/dbs/initoracle.ora; 
                         ; ORACLE instance started. Total System Global Area 135337420 bytes Fixed Size 452044 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes SQL> alter database mount standby database; Database altered. SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; Database altered. 在備用節(jié)點(在primary主機上) 先將primary此時的initoracle.ora恢復(fù)為以前是primary時的參數(shù)。 SQL> alter database commit to switchover to primary; Database altered. SQL> shutdown immediate; ORA-01507: database not mounted ORACLE instance shut down. SQL> startup pfile=/home/oracle/product/9.2.0/dbs/initoracle.ora; ORACLE instance started. Total System Global Area 135337420 bytes Fixed Size 452044 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes Database mounted. Database opened.