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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9240380/viewspace-589039/