ITPub博客

首页 > Linux操作系统 > Linux操作系统 > data guard configuration on solaris 10

data guard configuration on solaris 10

原创 Linux操作系统 作者:wisdomone1 时间:2009-04-14 20:21:23 0 删除 编辑

1,在两个主机上,分别安装两个solaris 10 操作系统,主机中分别为:dg1和dg2
  (注:两台主机在一个lan内,可以互通),下为dg1和dg2的网络规划
  dg1:192.168.1.5     ip
      255.255.255.0   netmask
      192.168.1.1     route
       
  dg2:192.168.1.6
      255.255.255.0
      192.168.1.1

2,在dg1上面安装oracle10g数据库软件(用dbca新建一个名为dg1的数据库实例)
  在dg2上面只安装oracle10g数据库软件(注:到时把dg1上面的数据库实例dg1的数据文件及日志文件,
  密码文件还有pfile文件ftp到dg2相应的目录)
3,在dg1上面把dg1数据库配置成归档模式(对于dataguard,数据库必须运行在归档模式,因为要依据log transport来实现主备库同步)
   sqlplus "/as sysdba"
   shutdown immediate
   startup mount
   alter database archivelog;
   alter database open;
   alter system set log_archive_dest_1='location=/export/oracle/dg1archive';---配置主库的归档目录
   alter system set log_archive_dest_2='SERVICE=dg2'; ---这个非常重要,没有这个主库的归档日志不会传到备库上
4,在dg1上面,alter database create standby controlfile as '/export/oracle/product/10.0/oradata/dg1/dg2control01.ctl';
   ---创建备库的控制文件,一会儿这个文件要ftp到dg2备机对应目录上面去
5,在dg1上面,sqlplus "/as sysdba"
  把以下查询的文件(数据文件,日志文件,临时文件及dg2pfile.ora)压缩 tar到一个大的文件
  select name from v$datafile;
  select name from v$tempfile;
  select member from v$logfile;
  create pfile='/export/oracle/product/10.0/oradata/dg1/dg2pfile.ora' from spfile;---生成备库的pfile参数文件
6,把第5步的大tar文件从dg1,ftp到dg2对应目录下
  在dg1上面,ftp 192.168.1.6(oracle/system)
 

bash-2.05b$ more dg2pfile.ora   ---用于备库的参数文件(来源于第5步),注意我注解的,没有注解和主库spfile一样
dg1.__db_cache_size=130023424
dg1.__java_pool_size=4194304
dg1.__large_pool_size=4194304
dg1.__shared_pool_size=75497472
dg1.__streams_pool_size=0
*.background_dump_dest='/export/oracle/bdump'  ---目录改成备库的bdump目录
*.compatible='10.2.0.2.0'
*.control_files='/export/oracle/oradata/dg2control01.ctl'  ---备库控制文件的目录
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='dg1'             -----这个参数一定要和主库配置成一样
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dg1XDB)'
*.job_queue_processes=10
*.log_archive_dest_1='location=/export/oracle/dg2archive'  ----备库的归档目录
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=300
*.pga_aggregate_target=72351744
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=218103808
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/export/oracle/udump'   ----备库udump目录
*.db_file_name_convert='/export/oracle/product/10.0/oradata/dg1','/export/oracle/oradata' 
     ---这个是配置主库与备库数据文件的目录对应关系,当时你要在备库同主库数据文件目录是一样的,不用配置这个参数了
*.log_file_name_convert = '/export/oracle/product/10.0/oradata/dg1','/export/oracle/oradata'
     ---这个是配置主库与备库日志文件的目录对应关系

 7,在dg2主机上,配置备库的相关目录
   su - oracle   ---log as oracle to os
   mkdir -p /export/oracle/oradata
   mkdir -p /export/oracle/dg2archive
   mkdir -p /export/oracle/bdump
   mkdir -p /export/oracle/udump
  
8,利用netmgr(这是个图形工具)在dg1和dg2的数据库上配置监听和服务相关信息---此至关重要
  配置好的信息如下:

dg1相关配置

bash-2.05b$ more tnsnames.ora
# tnsnames.ora Network Configuration File: /export/oracle/product/10.0/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

DG2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.6)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dg2)
    )
  )

DG1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.5)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dg1)
    )
  )

bash-2.05b$ more listener.ora
# listener.ora Network Configuration File: /export/oracle/product/10.0/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = dg1)
      (ORACLE_HOME = /export/oracle/product/10.0)
      (SID_NAME = dg1)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.5)(PORT = 1521))
  )

bash-2.05b$
 
dg2相关配置:
bash-2.05b$ cd /export/oracle/product/10.0/network/admin
bash-2.05b$ more listener.ora
# listener.ora Network Configuration File: /export/oracle/product/10.0/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = dg2)
      (ORACLE_HOME = /export/oracle/product/10.0)
      (SID_NAME = dg2)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.6)(PORT = 1521))
  )

bash-2.05b$ more tnsnames.ora
# tnsnames.ora Network Configuration File: /export/oracle/product/10.0/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

DG2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.6)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dg2)
    )
  )

DG1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.5)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dg1)
    )
  )

bash-2.05b$

9,分别在dg1和dg2上开启监听器,且测试连通性(在dg1和dg2分别执行以下)
  lsnrctl start
  tnsping dg1
  tnsping dg2
10,在dg2主机上(也就是备机上),
   su - oracle
   export ORACLE_SID=dg2
   sqlplus "/as sysdba"
   startup nomount pfile='/export/oracle/oradata/dg2pfile.ora'  --dg2pfile.ora就是上面来源于主库且后来添加编辑的pfile文件
   alter database mount standby database;
   alter database recover managed standby database disconnect;---这个就是开始接受主库的归档日志了
11,测试日志 传送及应(主备库)
   在dg1上
   sqlplus '/as sysdba'
   alter system switch logfile   ---手工切换日志,这样产生归档日志
   在dg2上
   ls -l /export/oracle/dg2archive  ---多运行几次这个命令,看主库的归档日志传送过来没有
   在dg2上
   select name,archived,applied from v$archived_log;---查看归档日志的归档及应用情况

   实际测试
   在dg1上
   sqlplus '/as sysdba'
   alter user scott identified by system account unlock;
   conn scott/system
   create table test_dg(a int);
   insert into test_dg values(1);
   insert into test_dg values(2);
   commit;
   alter system switch logfile;
   在dg2上
   alter database recover managed standby database cancel;---现在要打开备库查看主库归档是否传送及应用过来,所以要停止日志传送
   alter database open read only; ---物理备库只要查询,不能dml
   conn scott/system
   select * from test_dg;---一查有结果。说明现在备库与主库同步了

 

下附:在作这个dg实验中,碰到一些问题:
1,ORA-12154: TNS:could not resolve the connect identifier specified
   经分析,是因为我.profile文件中$ORACLE_BASE写成了$ORALCE_BASE,所以大家在配置参数一定要细心。一不小心。就是排查好久
2,TNS-01106: Listener using listener name LISTENER has already been started
   经分析,这是因为我开始在dg1和dg2上,利用netmgr配置监听器时,分别配置了两上数据库服务(其实只要配置一个就好了。不然会重复的)

3,ORA-16058: standby database instance is not mounted
  这是因为主备库现在用的控制文件不一致。这样你就要重新从主库生成备库的控制文件,然后ftp到备库
4.在利用dbca建库时,报out of memory,处理如下
   从solaris 10开始,对sem,shm的配置无法通过/etc/system文件来进行修改,更改方式如下:
1) 设置max-shm-memory的值为4GB:
#projadd -U oracle –K "project.max-shm-memory=(priv,4096MB,deny)" user.oracle
# cat /etc/project
在project文件的末尾能够看到新增加的一行
user.oracle:100::oracle::project.max-shm-memory
(priv, 4294967296,deny)I
2) 修改参数max-sem-idsITPUB个人空间
# projmod -s -K "project.max-sem-ids=(priv,256,deny)"  user.oracle

5.切记把主库的密码文件ftp到备库的相应目录($ORACLE_HOME/dbs/orapwdg1),ftp到备库后,改名为orapwdg2
  ,你要没作这一步,会报权限不足,在用sqlplus连接数据库时


其它:
1,data guard说白了,就是主库一个clone,主备库同步通过log transport(mrp进程)来同步数据.
2,对于备库
  在接受主库归档日志时,不能打开备库,也就是讲
  alter database open read only 同alter database recover managed standby database disconnect是水火不容
 


  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-589039/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb qq: 305076427 微博: wisdomone9

注册时间:2008-04-04

  • 博文量
    2150
  • 访问量
    11833105