Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1196152
  • 博文数量: 245
  • 博客积分: 10185
  • 博客等级: 上将
  • 技术积分: 2744
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-30 17:07
文章分类

全部博文(245)

文章存档

2015年(1)

2014年(1)

2013年(1)

2012年(1)

2011年(37)

2010年(20)

2009年(14)

2008年(38)

2007年(88)

2006年(44)

分类: Oracle

2006-11-02 10:24:15

:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。

 

摘要:本文简单介绍了oracle9i 在linux9上的安装上要注意的一些常见问题及dataguard的安装配置!

环境:

      os:  linux 9

   oracle:  oracle9i

 primary: 1.1.1.1

standby: 1.1.1.2 (主副主机都是两台普通的pc主机)

 

第一部分  oracle9i linux9上的安装

 

 本来我不想写这方面的东东,但是对比oracl9isolaris 下和在linux下安装,oracle9i linux9上的安装真的是要麻烦很多,下面我把我遇到的问题(好像也是大部分oracle初学者安装时遇到的问题)简要的说一下。

 

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  (通过IE无法下载的话,就用命令行)gcc -shared -o libcwait.so -fpic -O2 libcwait.c进行编译然后export LD_PRELOAD=/$path/libcwait.so

上面的方法能使Oracle Net configuration Assistant  Oracle Database configuration Assistant 安装成功。

 

修复Agent configuration Assistant不能配置成功的方法:请参考chinaunix上的

RHAS3上成功安装Oracle9204作者:

----------------------------------------------------------------------------------------------

运行runInstaller之后,出现安装组件的选择结果,这时点“Install”,开始安装,复制文件,进度条在一点一点的增加,当安装并link完后,出现配置工具界面,agent服务不能配置成功,忽略不用管,在下面修复。DBCANETCAHTTP都正确配置完毕哦。呵呵。下面开始修复错误。其实要是把各个界面抓取下来就更好了。
6
、安装p3238244_9204_LINUX.zip补丁

此补丁也是从[url][/url]下下载,同时要下载一个opatch软件包:p2617419_220_GENERIC.zip,它主要是用来悠agent服务不能启动的错误。

过程如下:
[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
[/quote:864939f94a]
补丁修复完成,需要relinked一个.mk文件。

$ cd $ORACLE_HOME/network/lib
$ make -f ins_oemagent.mk install
现在在运行agentctl start,看是不是可以成功运行agent服务了啊,可以用stopstatus来停止此服务或者检查服务的状态。

在这个成功之后,居然不能启动Oracle,说是不能找到初始化文件,没办法,我用dbca先删除了原来安装时建立的库,再重新建立了数据库。

7
、运行dbca来创建数据库。呵呵,一路畅通,完成数据库的安装。

希望你也能成功安装。

 

运行runInstaller安装界面出来出现乱码

export LANG=en_us 运行runInstaller (这是最简单实用的办法)

 

/etc/oratab 错误

如果在机器上以前安装过,再一次安装的时候如果报/etc/oratab 错误。请将/etc/oratab 清空(删除也可)

cp /dev/null  /etc/oratab 

(4)然后开始建库,当建库到46%时会出现共享内存问题,
     
  ORA-27123: unable to attach to shared memory segment
     
这时需要给内核指定内存,可以:

     
  echo 4294967295 >/proc/sys/kernel/shmmax
     
或者

     
  编辑/etc/sysctl.conf
     
  
kernel.shmmax=4294967295
     
这样就可以数据库的安装。

运行: 要启动oracle要先运行数据库监听程序:lsnrctl  start   关闭:lsnrctl stop
   运行oemapp console可以打开oracle企业管理器工具

 

还有一些错误,可能需要修改/etc/hosts/etc/sysctl.conf,请大家在google上搜一下按照网友提示的方法进行修改。

另外主副主机的目录设置成一样。都将oracle用户主目录设为/home/oracle.主副主机的数据库名字都设为oracle,实例名也都设为一样,都设为oracle(申明一点,是否必须将主副主机的数据库名字实例名都设为相同,我曾在cu上发过贴子问过,好像大家都说不需要,但我们这的dba说是必须,反正我在这里设的是相同。

 

第二步:Dataguard配置

首先将主副两主机都设为归档模式。

1.    主节点备份并生成备用数据库控制文件

登陆主节点,进行数据库备份,并生成备用数据库控制文件

[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. 登陆备用节点(standby),ftp获得primary主机的数据库文件(即oradata.tar文件)、备用控制文件(/home/oracle/standby.ctl) ,口令文件( $ORACLE_HOME/dbs/下的orapworacle)传到standby里的相应位置。

具体步骤:

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的大作及很多人的相关文章,都没有提到这一点,但如果没做这一步的话,再后面的启动备用数据库的时候,即在

[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目录。现在新建

primary目录,再在primary目录下新建bdump,cdump,udump.

Primary的参数文件

 

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=/home/Oracle/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")              ----(主辅数据库数据文件相互转换的目录)

 *.STANDBY_FILE_MANAGEMENT=AUTO  即可实现重命名主库的数据文件!!
*.LOG_FILE_NAME_CONVERT=("/home/oracle/oradata/archivelog","/home/oracle/oradata/archivelog")   ----(主辅数据库联机日志redolog相互转换的目录)
*.STANDBY_ARCHIVE_DEST=/home/oracle/oradata/archivelog                   

                     ----(从主数据库产生的archivelog传到辅数据库的目录)

加粗的是我新添加的选项,基本上都是必需的。红色是注释,实际文件里请不要添加。

 

 4.  配置主节点(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)))

同样,在副节点(standby) 的tnsnames.ora文件

 

5. 在副节点(standby)上配置listener.ora文件, 添加监听服务standby_listener,在相应的节里添加有关的内容.

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      # 启动监听服务

 

 6.在主备节点用tnsping测试网络连通性

 

primary机上

-bash-2.05b$  tnsping  primary

-bash-2.05b$  tnsping  standby

 

standby机上

-bash-2.05b$  tnsping  primary

-bash-2.05b$  tnsping  standby

 

7. 启动副数据库

 

   sql> startup nomount;

   SQL> alter database mount standby database;

Database altered.

SQL> alter database recover managed standby database disconnect from session;

Database altered.

 

8. 在主节点设置归档路径

SQL> alter system set log_archive_dest_2='service=standby mandatory reopen=60';

System altered.

定义了主库向副库传输日志

# 定义归档到备用库,强制归档,重试时间60秒。
#
如果定义为可选状态(optional),那么在归档失败后不会再次尝试归档的。定义
#
madatory状态后,如果本次归档失败,则在归档下一个日志时会再次尝试

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL>

在备用节点观察日志

[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.主辅数据库的切换(停止主数据库,启用备用数据库)

修改primary的参数文件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参数

 

修改standby的参数文件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主机上执行

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)启用主数据

SQL> create spfile from pfile;

SQL> startup nomount;

SQL>show parameter standby_file_management;

SQL> alter database mount standby database;

Database altered.

 

打开备用数据库(在standby主机上执行)

[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主机上执行

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Database altered.

 

primary主机上观察日志应用情况

[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.现在可做一个测试,在standby主机上进行数据修改(standby主机现在做primary)

 

 SQL> create table t as select * from dba_users;

Table created.

SQL> alter system switch logfile;   

System altered.

 

从库上(primary主机上)read only打开数据库,执行查询

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,看修改时候能马上传到副库上(应该是只要在副库上执行恢复模式,就能在副库上看到新建的表空间

3.  在主库上新建一个临时表空间,rename datafile 均不能应用到副库上.

4.  应当实时察看standby库的alert文件,就能清晰明了地知道主副更新的情况。

5.  关于启动关闭顺序

启动的时候,先从库的listener,再启动从库,再启动主库的listener,再主库

关闭的时候,先关闭主库,再启动从库。

6. 关于failover和switchover

-------------------------------------------- Rollingpig

我给个结论吧。在9i dataguad环境中

1Switch Over 必须是Primary 正常并且是必须Primary 主动先Switch standby.然后standby 才能switch primary.

2。如果需要作成primary出问题standby 能接管的话必须作 failover ,而不是SwitchOver

 

Failover 和 Switchover 的区别

Failover :
将主数据库offline,备用数据库online,这种操作由系统和软件失败引起。
即使在备用数据库上应用重做日志,也可能出现数据丢失的现象,除非备用数据库运行在 guaranteed protection 模式。
原主数据库重新使用时必须重新启动实例。
其它的备用数据库也需重新启动实例。

Switchover :
故意将主数据库offline,而将另一备用数据库online,它能够切换到备用数据库而不需同步操作。如:可使用 Switchover 完成系统的平滑升级。
即使在备用数据库上不应用重做日志,也不会造成数据的丢失。
数据库不需重新启动实例。这使主数据库几乎能立即在备用数据库上恢复它的功能,因此可经常进行定期维护而不需中断操作。
  Failover和Switchover的区别为:当Failover发生,备用数据库切换为主数据库之后,它丢失了备用数据库的所有能力,也就是说,不能再返回到备用模式;而Switchover可以,备用数据库可切换为主数据库,也可从主数据库再切换回备用数据库。

 

7. 察看主机当前的运行状态:

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.查看主数据库日志是否全部传送到副数据库,可查看v$archive_gap,更简单的方法是查看各自主机的日志归档目录的日志序号即可。

 

11. 常用的一些方法:

可在副数据库上运行一些脚本,确保主数据库上的更新能及时在副数据库上得到实现。可将以下脚本放在crontab表中。

$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

$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.把数据库切换回到主节点

先将standby此时的initoracle.ora恢复为以前是standby时的参数。

在主节点(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.

 

在备用节点(在primary主机上)

先将primary此时的initoracle.ora恢复为以前是primary时的参数。

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.    

 

 

衷心致谢: CU oracle斑竹 sshd ,我在配置dataguard时得到他的很多帮助!!

参考文献

Dataguard配置Step by step (eygle大作) 

 

ITPUB 出的第一本书DBA精粹 万正勇(ITPUB ID wzy25)  写的dataguard配置文档,要想深入学习,强烈建议好好看看!

 

阅读(2974) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~