物理方式下怎样建立oracle data guard

71次阅读
没有评论

共计 22084 个字符,预计需要花费 56 分钟才能阅读完成。

物理方式下怎样建立 oracle data guard,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

物理方式下建立 oracle data guard(一):前奏
前后折腾了一个星期左右时间,把物理方式下建立 ORACLE data guard 配好了,同事帮了不少忙,在此表示感谢。在这个过程中遇到了很多问题,有的问题很浅显,一下就解决了;有的问题是因为粗心引起的,比如说在服务器参数文件里面少写了一点,结果花很长时间来排错;有的问题第一次碰到,解决了之后很兴奋,因为又积累了经验,就像上次配置 HP MC 双机的时候碰到的那个问题,之前从未碰到过,这样折腾一下倒还认识了 kcmodule 这么样一个命令,附带一些不同的内核参数。
 
在这之前也尝试配置过 data guard,参考过一些文档书籍,最后以失败告终,倒在主、备节点日志文件不能同步这个问题上再也回不得头来。经过这一次,我发现网上很多参考文档甚至业已出版的技术类书籍都是写得含含糊糊不太完整的,很多应该特别指出的地方被他们给忽略了;很多可以省略的地方又花了大量的篇幅来解释,这显得没有必要。
“RAC 的原有参数不变,添加下列参数:
*.service.name=wxxr_rac“这一句里面的“service.name”应该是“service.names”才对,少写了一个“s”,有时候就是这样的,失之毫厘谬以千里,涉及到参数的地方更应该严谨一些。这样的错误在实验过程中我也碰到过一次,把整个人搞得很崩溃,所幸后来找到问题所在。
除此之外,主备节点切换的过程也写得比较粗糙,有点一笔带过的感觉,其实这部分恰恰是比较重要的。
 
在我看来,配置 data guard 过程中涉及比较重要的文件分别是:服务器参数文件、密码文件、listener.ora 文件以及 tnsnames.ora 文件,其中尤以服务器参数文件以及 listener.ora 最为重要,因为在这里要采取静态方式来配置 listener.ora 文件,以往那种动态方式是行不通的,因为要保证备节点在 mount 方式下也能注册到数据库,动态方式下做不到这一点。
 
ORACLE data guard 和 ORACLE RAC 都是当红巨星,越发受人待见,在银行、企业、政府机构等等中扮演着重要的角色。在
“RAC 的强项在于解决单点故障和负载均衡,因此 RAC 方案常见于 24* 7 的核心系统。但 RAC 方案中数据只有一份,尽管通过 RAID 等机制可以避免存储故障,但是数据本身是没有冗余的,容易形成单点故障。而 Data Guard 是通过冗余数据来提供数据保护的。通过日志同步机制保证冗余数据和主数据库之间的同步,这种同步可以是实时、延时、同步、异步多种形式。常用于异地容灾和小企业的高可用性方案。
 
ORACLE data guard 有两种实现方式,一种是物理方式下的 data guard,也就是我实验中用到的,通过在备节点上同步主节点上的 redo 日志来实现;还有一种是逻辑方式下的 data guard,通过在备节点上应用主节点上 redo 日志转化而来的 SQL 语句实现日志同步。因为这种方法没有物理方式使用普遍,所以我暂时先做物理方式下的 data guard 实验,逻辑的以后再说。
 
下面进入正题。

物理方式下建立 oracle data guard(二):环境

首先,操作系统,这里用到的 HP rx8640 服务器上的两个分区,并分别创建“/dev/vg00/lv_oracle”文件系统并挂载到“/home/db/oracle 目录下,接着创建“/dev/vg00/lv_arch”文件系统并挂载到“/arch”目录下,作为归档日志存放的地方。创建完毕之后记得给目录赋予正确的属主(oracle:dba)以及权限,否则会有很大问题。
 
ORACLE 版本这里用到的是 10.2.0.1,之前第一次做实验的时候没有注意,挑选的两个分区 oracle 版本不一致,一个节点的版本是 10.2.0.1 的,另一个节点的版本是 10.2.0.3 的。起初用 RMAN 进行备份还原到备节点的时候系统突然提醒数据需要升级,搞得我一愣一愣的,仔细检查了一下才发现是数据库版本不一致。虽说版本不一致也能做,情况好点就是这种情况,主节点 oracle 版本比备节点低,如果主节点 oracle 版本比备节点高就比较麻烦了。
 
再有一个是 SID 的问题,主、备节点我都把实例的 SID 设为 ora,这样做是为了方便,也可以两边实例名设为不一致。设为一致的好处是修改服务器参数文件的时候没有那么麻烦,可修改之处变少,工作量变少,错误自然也变少了。
 
下面再次进入正题,首先在主、备节点的正确路径分别安装 oracle10.2.0.1 版本数据库软件(备节点不需要通过图形界面单独建立数据库,通过从主节点恢复过来即可),然后通过图形界面的 dbca 方式在主节点建库。为了图方便,满足实验效果,这里既不使用裸设备建库也不使用 ASM 方式建库,一切按照系统默认的方式往下走即可。
 
因为主节点需要设置为归档模式,这里我们可以在建库的时候就指定成归档模式,并指定归档路径为“/arch”,这样就不用在数据库建好之后再手工修改到归档模式下了,建好之后如下所示:
SQL archive log list;
Database log mode  Archive Mode
Automatic archival  Enabled
Archive destination  /arch
Oldest online log sequence  1
Next log sequence to archive  2
Current log sequence  2

物理方式下建立 oracle data guard(三):开工

下面设置主节点数据库为 force logging 模式:
SQL alter database force logging;
Database altered.
force logging 存在的意义:使得 Oracle 无论什么操作都进行 redo 的写入。
 
通过 select 语句可以查看:
SQL select FORCE_LOGGING from v$database;
FOR

YES

因为刚建立数据库,还没有生成归档日志,我们可以手工进行日志切换来让数据库产生日志文件:
SQL alter system switch logfile;
System altered.
SQL alter system switch logfile;
System altered.
SQL alter system switch logfile;
System altered.
SQL select name from v$archived_log;
NAME
——————————————————————————–
/arch/1_2_697298091.dbf
/arch/1_3_697298091.dbf
/arch/1_4_697298091.dbf
 
查看已有的日志文件:
SQL select * from v$logfile;
rows will be truncated

  GROUP# STATUS  TYPE  MEMBER
———- ——- ——- ——————————————————–
  3  ONLINE  /home/db/oracle/oradata/ora/redo03.log
  2  ONLINE  /home/db/oracle/oradata/ora/redo02.log
  1  ONLINE  /home/db/oracle/oradata/ora/redo01.log
 
为备节点创建同样大小的三组日志文件并检验:
SQL alter database add standby logfile group 4 (/home/db/oracle/oradata/ora/redo04.log) size 50m;
Database altered.
SQL alter database add standby logfile group 5 (/home/db/oracle/oradata/ora/redo05.log) size 50m;
Database altered.
SQL alter database add standby logfile group 6 (/home/db/oracle/oradata/ora/redo06.log) size 50m;
Database altered.
SQL select * from v$logfile;
rows will be truncated

  GROUP# STATUS  TYPE  MEMBER
———- ——- ——- ——————————————————–
  3  ONLINE  /home/db/oracle/oradata/ora/redo03.log
  2  ONLINE  /home/db/oracle/oradata/ora/redo02.log
  1  ONLINE  /home/db/oracle/oradata/ora/redo01.log
  5  STANDBY /home/db/oracle/oradata/ora/redo05.log
  4  STANDBY /home/db/oracle/oradata/ora/redo04.log
  6  STANDBY /home/db/oracle/oradata/ora/redo06.log
6 rows selected.
 
关闭数据库,即将来到第一个重要步骤,修改服务器参数文件。
SQL shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

物理方式下建立 oracle data guard(四):变化

新建立的数据库是以服务器参数文件的形式启动的,而我们要修改的是参数文件,这里简单说说服务器参数文件跟参数文件的区别和联系。服务器参数文件也就是 spfileSID.ora,其内容是以二进制方式存在的,不能手工编辑;而参数文件即 initSID.ora,其内容是以文本方式存在的,可以手工编辑,这里我就需要对参数文件进行修改。
 
通常说来,会有一个默认的参数文件 init.ora,但这里我们需要的是 initora.ora,如果没有的话可以通过命令创建,如下所示:
SQL create pfile= /home/db/oracle/10g/dbs/initora.ora from spfile;
 
查看当前数据库是以服务器参数文件还是参数文件方式启动,可以通过命令进行查看,如下所示:
SQL show parameter spfile;
NAME  TYPE  VALUE
———————————— ———– ——————————
spfile  string  /home/db/oracle/10g/dbs/spfile
  ora.ora
如果 VALUE 下对应有文件,那说明是以 spfile,即服务器参数文件的方式启动。反之,则是以参数文件的方式启动。前一篇文章停掉了数据库,为的就是在修改参数文件之后,使用新修改的参数文件来启动数据库。
 
下面奉上修改之后的参数文件,修改之处以黑体字标明:
$ vi  initora.ora
ora.__db_cache_size=780140544
ora.__java_pool_size=4194304
ora.__large_pool_size=4194304
ora.__shared_pool_size=276824064
ora.__streams_pool_size=0
*.audit_file_dest= /home/db/oracle/admin/ora/adump
*.background_dump_dest= /home/db/oracle/admin/ora/bdump
*.compatible= 10.2.0.1.0
*.control_files= /home/db/oracle/oradata/ora/control01.ctl , /home/db/oracle/oradata/ora/control02.ctl , /home/db/oracle/oradata/ora/control03.ctl
*.core_dump_dest= /home/db/oracle/admin/ora/cdump
*.db_block_size=8192
*.db_domain=
*.db_file_multiblock_read_count=16
*.db_name= ora
*.db_recovery_file_dest= /home/db/oracle/flash_recovery_area
*.db_recovery_file_dest_size=2147483648
*.db_unique_name= 10gpri
*.dispatchers= (PROTOCOL=TCP) (SERVICE=oraXDB)
*.fal_client= 10gstandby
*.fal_server= 10gpri
*.job_queue_processes=10
*.log_archive_config= DG_CONFIG=(10gpri,10gstandby)
*.log_archive_dest_1= LOCATION=/arch VALID_FOR=(all_logfiles,all_roles) db_unique_name=10gpri
*.log_archive_dest_2= service=10gstandby arch async valid_for=(online_logfiles,primary_role) db_unique_name=10gstandby
*.log_archive_dest_state_1= enable
*.log_archive_dest_state_2= enable
*.log_archive_format= %t_%s_%r.dbf
*.open_cursors=300
*.pga_aggregate_target=3418357760
*.processes=150
*.remote_login_passwordfile= EXCLUSIVE
*.sga_target=1073741824
*.standby_file_management= auto
*.undo_management= AUTO
*.undo_tablespace= UNDOTBS1
*.user_dump_dest= /home/db/oracle/admin/ora/udump
 
至于为什么添加并修改这些参数,官方文档、别人的文档、技术类书籍都有说,google 或者百度或者百古虎一大把,我就不详述了。总之,db_unique_name 很重要,如果主、背节点的实例名都一样,就要靠这个来区分了。

物理方式下建立 oracle data guard(五):蜕变

接下来要做的,是以修改过的参数文件启动数据库并生成服务器参数文件,再让数据库以服务器参数文件的方式启动数据库:
1,使用修改过的参数文件将数据库启动到 nomount 模式:
SQL startup pfile= /home/db/oracle/10g/dbs/initora.ora nomount;
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size  1999160 bytes
Variable Size  285216456 bytes
Database Buffers  780140544 bytes
Redo Buffers  6385664 bytes
 
2,创建服务器参数文件:
SQL create spfile from pfile= /home/db/oracle/10g/dbs/initora.ora
File created.
 
3,以系统默认的服务器参数文件方式启动数据库:
SQL shutdown immediate;
ORA-01507: database not mounted

ORACLE instance shut down.
SQL startup
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size  1999160 bytes
Variable Size  285216456 bytes
Database Buffers  780140544 bytes
Redo Buffers  6385664 bytes
Database mounted.
Database opened.
 
4,创建密码文件(如果数据库建好之后存在的话,就不用再单独建立密码文件了):
$ orapwd file=/home/db/oracle/10g/dbs/orapwora password=oracle entries=10
$ ls
alert_ora.log  init.ora  lk10GPRI  lkORA_SINGLE  snapcf_ora.f
hc_ora.dat  initdw.ora  lkORA  orapwora  spfileora.ora
在这个地方我犯了低级错误,浪费了很多时间,这个在最后总结的时候来说。
 
下面就要提到监听文件以及 TNS 文件了,放下一篇文章里面列个专题,因为这一步很重要。如果不做好,后果很严重。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

物理方式下建立 oracle data guard(六):动静

下面说一下监听,这就是以前做实验的时候被卡门时间最长的地方,也是《大话 ORACLE RAC》作者没有交代清楚的地方。很多文档都提到了实验做到一定程度要配置监听和 TNS,以方便主、备节点互通有无。但却忽略提到一点那就是监听也有动态监听和静态监听之分,在 oracle data guard 实验中我们必须要用到静态监听,否则实验就没法进行下去。
 
先抄摘一点有关动态监听和静态监听的概念:
静态监听指实例启动时读取 listener.ora 配置文件,将实例和服务注册到监听程序。无论何时启动一个数据库,默认都有两条信息注册到监听器中:实例和服务
SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC =
  (GLOBAL_DBNAME = Ora8)
  (SID_NAME = test)
  )
  )

LISTENER =
  (DESCRIPTION =
  (ADDRESS = (HOST = 192.168.0.88)(PROTOCOL = TCP)(PORT = 1522))
  )
这是一个最简单的静态监听配置文件,SID_LIST_LISTENER 部分的 GLOBAL_DBNAME 表示向外提供的服务名,SID_NAME 是提供注册的实例。在 tnsnames.ora 文件中的 CONNECT_DATA 部分,可分别选择 SERVICE_NAME=Ora8 或 SID=test 为客户端提供连接。

动态注册不需要显示的配置 listener.ora 文件,实例启动的时候,PMON 进程根据 instance_name,service_name 参数将实例和服务动态注册到 listerer 中。如果没有设定 instance_name,将使用 db_name 初始化参数值。如果没有设定 service_names,将拼接 db_name 和 db_domain 参数值来注册监听。
 
如果对上述一番话还是不太明白,我再简单说一下一个最为关键的区别,在 oracle data guard 实验中,有时候我们需要将备节点启动到 mount 模式下,以此来接受主节点的 redo 日志文件完成自身的同步过程。而这个过程的前提就是两者在网络上要有一个互动,即你能凝望着我,我也能关切到你。如果是配置的动态监听,只要有实例没有启动到 open 状态,那就无法通过网络将服务注册到数据库,而只有静态监听可以完成这个任务。很多文档都指出需要修改 listener.ora 文件,但却不贯彻什么是静态监听什么是动态监听,所以具体操作起来就容易犯错误,继而去怀疑是不是参数文件配置有问题,这可真是无妄之灾。
 
下面显示的是我配置的静态监听内容以及 TNS 文件内容:
$ cat listener.ora
# listener.ora Network Configuration File: /u1/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
  (DESCRIPTION_LIST =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.152)(PORT = 1521))
  )
  )
  )
SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC =
  (SID_NAME = PLSExtProc)
  (ORACLE_HOME = /home/db/oracle/10g)
  (PROGRAM = extproc)
  )
  (SID_DESC =
  (GLOBAL_DBNAME = ora)
  (ORACLE_HOME = /home/db/oracle/10g)
  (SID_NAME = ora)
  )
  )
和动态监听所不同的是,这里手工指定了 ORACLE_HOME 路径以及 SID 名称。
 
$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /home/db/oracle/10g/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
10GPRI =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.152)(PORT = 1521))
  )
  (CONNECT_DATA =
  (SERVICE_NAME = ora)
  )
  )
ORA =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.152)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = ora)
  )
  )
10GSTANDBY =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.53)(PORT = 1521))
  )
  (CONNECT_DATA =
  (SERVICE_NAME = ora)
  )
  )
两个服务分别是 10GPRI 以及 10GSTANDBY。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

物理方式下建立 oracle data guard(七):测试

前面解释了动态监听和静态监听,下面要来实验一把,看数据库在 mount 状态下是否能够通过网络注册到数据库,下面就是具体实施过程:
1,在开始之前有一点要注意的就是,监听的开闭和数据库的开闭还有一点关系。正确的顺序是先启动监听,再讲数据库打开到 mount 的状态下,如果要重做一次,就要先关闭数据库,然后重启监听;
 
2,关闭主节点数据库,并启动到 mount 状态下(到此为止,对备节点的操作还没有开始):
SQL shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL startup mount;
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size  1999160 bytes
Variable Size  285216456 bytes
Database Buffers  780140544 bytes
Redo Buffers  6385664 bytes
Database mounted.
 
3,启动监听:
$ lsnrctl start
LSNRCTL for HPUX: Version 10.2.0.1.0 – Production on 11-SEP-2009 14:13:53
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
Starting /home/db/oracle/10g/bin/tnslsnr: please wait…
TNSLSNR for HPUX: Version 10.2.0.1.0 – Production
System parameter file is /home/db/oracle/10g/network/admin/listener.ora
Log messages written to /home/db/oracle/10g/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=128.199.36.152)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=128.199.36.152)(PORT=1521)))
STATUS of the LISTENER
————————
Alias  LISTENER
Version  TNSLSNR for HPUX: Version 10.2.0.1.0 – Production
Start Date  11-SEP-2009 14:13:53
Uptime  0 days 0 hr. 0 min. 0 sec
Trace Level  off
Security  ON: Local OS Authentication
SNMP  OFF
Listener Parameter File  /home/db/oracle/10g/network/admin/listener.ora
Listener Log File  /home/db/oracle/10g/network/log/listener.log
Listening Endpoints Summary…
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=128.199.36.152)(PORT=1521)))
Services Summary…
Service PLSExtProc has 1 instance(s).
  Instance PLSExtProc , status UNKNOWN, has 1 handler(s) for this service…
Service ora has 1 instance(s).
  Instance ora , status UNKNOWN, has 1 handler(s) for this service…
The command completed successfully
到这里可以看到监听已经成功启动。值得一提的是,在静态监听开启的情况下,实例的状态显示为“UNKNOWN,而动态监听开启状态下,实例的状态应该显示为“READY”。根据这一点也可以判断监听是以什么方式启动。
 
4,测试以网络方式注册到数据库:
$ sqlplus sys/oracle@10gpri as sysdba
SQL*Plus: Release 10.2.0.1.0 – Production on Fri Sep 11 15:01:20 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL
注意:如果输入“sqlplus system/oracle@10gpri as sysdba 可能仍然注册不到数据库,这就需要通过赋予 sysdba 给 system 用户的命令来实现。
 
这一步成功了之后,后面的过程就比较好办了。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

物理方式下建立 oracle data guard(八):意外

前面那篇文章提到了在启动静态监听、将数据库启动到 mount 模式下以网络方式注册数据库,是比较顺利的一种情况,之前还遇到了一个比较困惑的问题,下面就来讨论一下这种情况。
 
之前在成功配置监听文件、TNS 文件,也将数据库启动到了 mount 状态下,但死活就是无法通过网络方式注册到数据库,出现下面这个报错信息:
ORA-01031: insufficient privileges
提示没有足够的权限,有没有搞错?我是以 sys 用户登陆,sys 不就具有最高权限么?而且密码并没有输入错误。仔细检查了 listener.ora 以及 tnsnames.ora 文件,确认没有任何问题。因为在另一个环境就是这样设置的。尝试查看一下拥有 SYSDBA 权限的用户:
SQL select * from v$pwfile_users;
USERNAME  SYSDB SYSOP
—————————— —– —–

no rows selected.
 
看到这里,问题比较明朗了,密码文件没有起到作用。因为通过网络注册数据库,是要读取密码文件的,而 SYS 是默认具有 SYSDBA 权限的,这里显示不出来,说明密码文件没有被成功读取,自然也就无法注册到数据库了。打个简单的比喻,小明在一次语文期末考试之前想要作弊,作弊的方式是通过花点银子去买一份答案,结果买到一份假答案,那考试自然是过不了关的了。此情此景,殊途同归。
 
回忆一下系统建库之后,默认生成了一个正确的密码文件,但是我手贱,把这个文件给删除了,重新创建了一个,并且命名为 orapw10gstandby.ora。这个命名犯下两个错误,这两个错误也让我重新审视对密码文件规范化的认知程度。首先,密码文件是没有.ora 后缀的;其次,后缀之前应该以标准的“orapwSID”方式命名。这样一来,我删除了这个错误命名的密码文件,重新建立密码文件:
orapwd file=/home/db/oracle/10g/dbs/orapwora password=oracle entries=10
 
重新在数据库中查询拥有 SYSDBA 的用户:
SQL select * from v$pwfile_users;
USERNAME  SYSDB SYSOP
—————————— —– —–
SYS  TRUE  TRUE
这不,又重新回来了,再检验通过网络注册数据库,一切正常,于是这个问题也算告一段落了。
之所以写这么长一篇,还是为了强调密码文件的重要性,往往我们忽视掉的地方恰恰是最值得重视的。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

物理方式下建立 oracle data guard(九):宠幸

到现在为止我已经分不清我是在写技术博客还是在写生活日志了,或多或少掺入了个人感情,毕竟学习 data guard 时间不算短了,到现在才总算是有些柳暗花明。应该是才疏学浅,抑或是实在太笨,学东西慢,但看到有进展的时候还是抑制不住内心的激动的。闲话莫提,下面开始宠幸备节点,毕竟 data guard 这个军功章有主节点的一半,也有备节点的一半。
 
主节点需要我们完成的步骤大致就是前面那些文章所提到的了,只剩下最终的切换测试过程。而备节点需要关注的体现在以下几个方面:
目录、参数文件、密码文件、监听文件、TNS 文件、SID(这里继续使用 ora)
到这里,除了参数文件和监听文件需要稍作改动,其他诸如密码文件、TNS 文件只需从主节点拷贝即可,目录可以按照主节点相同的路径进行手工创建,在 unix 下面也就是 mkdir 而已,更快一些,你可以用 mkdir - p 实现,下面是具体过程:
 
1,创建 /home/db/oracle/oradata/ora 主目录以及主目录下 udump、adump、cdump、bdump 等次目录;
 
2,通过 ftp 方式拷贝主节点下密码文件、TNS 文件;
 
3,在主节点进行几次日志切换,产生一定量的归档日志文件:
SQL alter system switch logfile;
System altered.
SQL alter system switch logfile;
System altered.
SQL alter system switch logfile;
System altered.

SQL select name from v$archived_log;
NAME
——————————————————————————–
/arch/1_2_697298091.dbf
/arch/1_3_697298091.dbf
/arch/1_4_697298091.dbf
/arch/1_5_697298091.dbf
/arch/1_6_697298091.dbf
/arch/1_7_697298091.dbf
6 rows selected.
 
4,停掉主节点数据库,拷贝归档日志文件以及所有数据文件
NOTE: 拷贝到备节点之后注意查看属主是否正确,否则修改如下:
root@hpvm3:/home/db/oracle/oradata/ora#chown oracle:dba *
 
5,将主节点数据库启动到 mount 模式下,创建 standby 控制文件:
SQL startup mount;
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size  1999160 bytes
Variable Size  289410760 bytes
Database Buffers  775946240 bytes
Redo Buffers  6385664 bytes
Database mounted.
SQL alter database create standby controlfile as /arch/standby.ctl
Database altered.
 
6,拷贝 standby 控制文件到备节点,并赋予正确属主:
root@hpvm3:/home/db/oracle/oradata/ora#chown oracle:dba standby.ctl
 
7,修改备节点参数文件如下:
root@hpvm3:/arch#vi initstandby.ora
initstandby.ora 35 lines, 1328 characters
ora.__db_cache_size=805306368
ora.__java_pool_size=4194304
ora.__large_pool_size=4194304
ora.__shared_pool_size=251658240
ora.__streams_pool_size=0
*.audit_file_dest= /home/db/oracle/admin/ora/adump
*.background_dump_dest= /home/db/oracle/admin/ora/bdump
*.compatible= 10.2.0.1.0
*.control_files= /home/db/oracle/oradata/ora/standby.ctl
*.core_dump_dest= /home/db/oracle/admin/ora/cdump
*.db_block_size=8192
*.db_domain=
*.db_file_multiblock_read_count=16
*.db_name= ora
*.DB_UNIQUE_NAME= 10gstandby
*.log_archive_config= DG_CONFIG=(10gpri,10gstandby)
*.db_recovery_file_dest= /home/db/oracle/flash_recovery_area
*.db_recovery_file_dest_size=2147483648
*.dispatchers= (PROTOCOL=TCP) (SERVICE=oraXDB)
*.job_queue_processes=10
*.log_archive_dest_1= LOCATION=/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=10gstandby
*.log_archive_dest_2= service=10gpri arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=10gpri
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER=10gstandby
*.FAL_CLIENT=10gpri
*.open_cursors=300
*.pga_aggregate_target=3418357760
*.processes=150
*.remote_login_passwordfile= EXCLUSIVE
*.sga_target=1073741824
*.undo_management= AUTO
*.undo_tablespace= UNDOTBS1
*.STANDBY_FILE_MANAGEMENT=AUTO
*.user_dump_dest= /home/db/oracle/admin/ora/udump
 
这一切工作做完之后,ok,轮到咱备节点登上历史舞台了。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

物理方式下建立 oracle data guard(十):革命

闲话不提,下面直入正题,看备节点建功立业:
1,以修改之后的参数文件为优秀代表,启动备节点数据库到 nomount 模式下:
SQL startup nomount pfile= /arch/initstandby.ora
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size  1999192 bytes
Variable Size  264244904 bytes
Database Buffers  805306368 bytes
Redo Buffers  2191360 bytes
 
2,创建服务器参数文件并关闭数据库:
SQL create spfile from pfile= /arch/initstandby.ora
File created.
SQL shutdown immediate;
ORA-01507: database not mounted

ORACLE instance shut down.

3,启动修改后的监听(只需要修改其中的 IP 地址即可):
$ lsnrctl start
LSNRCTL for HPUX: Version 10.2.0.1.0 – Production on 11-SEP-2009 15:54:36
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
Starting /home/db/oracle/10g/bin/tnslsnr: please wait…
TNSLSNR for HPUX: Version 10.2.0.1.0 – Production
System parameter file is /home/db/oracle/10g/network/admin/listener.ora
Log messages written to /home/db/oracle/10g/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=128.199.36.53)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=128.199.36.53)(PORT=1521)))
STATUS of the LISTENER
————————
Alias  LISTENER
Version  TNSLSNR for HPUX: Version 10.2.0.1.0 – Production
Start Date  11-SEP-2009 15:54:36
Uptime  0 days 0 hr. 0 min. 0 sec
Trace Level  off
Security  ON: Local OS Authentication
SNMP  OFF
Listener Parameter File  /home/db/oracle/10g/network/admin/listener.ora
Listener Log File  /home/db/oracle/10g/network/log/listener.log
Listening Endpoints Summary…
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=128.199.36.53)(PORT=1521)))
Services Summary…
Service PLSExtProc has 1 instance(s).
  Instance PLSExtProc , status UNKNOWN, has 1 handler(s) for this service…
Service ora has 1 instance(s).
  Instance ora , status UNKNOWN, has 1 handler(s) for this service…
The command completed successfully
 
4,启动数据库到 mount 下:
$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 – Production on Fri Sep 11 15:54:55 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to an idle instance.
SQL startup mount;
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size  1999192 bytes
Variable Size  264244904 bytes
Database Buffers  805306368 bytes
Redo Buffers  2191360 bytes
Database mounted.
 
5,测试以网络方式注册数据库没有问题:
$ sqlplus sys/oracle@10gstandby as sysdba
SQL*Plus: Release 10.2.0.1.0 – Production on Fri Sep 11 15:01:20 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL
 
6,启动主节点数据库:
$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 – Production on Fri Sep 11 15:59:29 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL alter database open;
Database altered.
 
7,重新关闭备节点数据库并以 standby 方式启动到 mount 状态下:
SQL startup nomount
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size  1999192 bytes
Variable Size  264244904 bytes
Database Buffers  805306368 bytes
Redo Buffers  2191360 bytes
SQL alter database mount standby database;
Database altered.
 
8,将备节点更改到接受主节点 redo 日志模式下:
SQL alter database recover managed standby database disconnect from session;
Database altered.
 
9,查看切换状态:
SQL select switchover_status from v$database;
SWITCHOVER_STATUS
——————–
TO PRIMARY
如果显示为 TO PRIMARY,表示一切正常。
 
到此为止,备节点革命过程完毕,和主节点遥相呼应,要想完全接收主节点 redo 日志,就需要主节点做出一些动作了,连同主备切换放到下篇再说。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

物理方式下建立 oracle data guard(十一):会师

备节点需要完成的工作已经完成,现在应该让主、备节点相互之间通通气了。判断 data guard 是否搭建成功有两个标准,一个是看主备节点的日志是否能够同步,一个是看主备之间是否能够顺利切换,完成角色转换。下面就要开始主备日志同步的过程:
 
1,在主节点进行日志切换:
SQL alter system switch logfile;
System altered.
 
2,查看当前归档日志数量:
SQL select name from v$archived_log;
NAME
——————————————————————————–
/arch/1_2_697298091.dbf
/arch/1_3_697298091.dbf
/arch/1_4_697298091.dbf
/arch/1_5_697298091.dbf
/arch/1_6_697298091.dbf
/arch/1_7_697298091.dbf
/arch/1_8_697298091.dbf
10gstandby
10gstandby
10gstandby
10gstandby
10gstandby
10gstandby
10gstandby
14 rows selected.
这个时候出现了七行 10gstandby,对应备节点下同步过去的日志,数量和主节点下归档日志相同,说明主备日志同步成功。如果还不放心,可以到备节点查看归档日志的同步情况:
 
SQL select name from v$archived_log;
NAME
——————————————————————————–
/arch/1_2_697298091.dbf
/arch/1_3_697298091.dbf
/arch/1_4_697298091.dbf
/arch/1_5_697298091.dbf
/arch/1_6_697298091.dbf
/arch/1_7_697298091.dbf
/arch/1_8_697298091.dbf
 
ok,这样主、备节点就日志同步了。
 
这是在比较顺利的情况下,如果主备节点无法同步日志,首先要看两个节点之间通讯是不是有问题,这可以通过 tnsping 来实现,例如:
$ tnsping 10gpri
TNS Ping Utility for HPUX: Version 10.2.0.1.0 – Production on 15-SEP-2009 09:58:22
Copyright (c) 1997, 2005, Oracle.  All rights reserved.
Used parameter files:

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.152)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ora)))
OK (0 msec)
 
再有,可以通过执行命令:
alter system set log_archive_dest_state_2= defer scope=memory;
alter system set log_archive_dest_state_2= enable scope=memory;
来尝试是否有好转。
 
如果这两个步骤执行了都没有办法,那就要仔细查看 alert 日志文件,看里面都有些什么报错信息,再具体问题具体分析了。

finished , over  /

refer:

[oracle@standby admin]$ cat listener.ora
# LISTENER.ORA Network Configuration File: /opt/oracle/product/9.2.0/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))
)
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/oracle/product/9.2.0)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = primary)
(ORACLE_HOME = /opt/oracle/product/9.2.0)
(SID_NAME = primary)
)
)

[oracle@eygle admin]$ cat listener.ora
# LISTENER.ORA Network Configuration File: /opt/oracle/product/9.2.0/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = eygle)(PORT = 1521))
)
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = primary)
(ORACLE_HOME = /opt/oracle/product/9.2.0)
(SID_NAME = primary)
)
)

关于物理方式下怎样建立 oracle data guard 问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-17发表,共计22084字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)