oracle10g+Dataguard配置.docx
《oracle10g+Dataguard配置.docx》由会员分享,可在线阅读,更多相关《oracle10g+Dataguard配置.docx(19页珍藏版)》请在冰豆网上搜索。
oracle10g+Dataguard配置
Linux上实现oracle双机实时备份DataGuard
更改机器名
Hostname机器名(自己启,两台机器不能一样,建议用dataguard1和dataguard2)
vi/etc/sysconfig/network文件里面的hostname
然后vi/etc/hosts添加本地hosts
安装数据库
在RHEL5下安装oracle10g
1、添加组和用户
#/usr/sbin/groupaddoinstall
#/usr/sbin/groupadddba
#/usr/sbin/useradd-goinstall-Gdbaoracle
#passwdoracle
2、添加以下内容到/etc/sysctl.conf
kernel.shmall=2097152
kernel.shmmax=2147483648
kernel.shmmni=4096
kernel.sem=25032000100128
fs.file-max=65536
net.ipv4.ip_local_port_range=102465000
net.core.rmem_default=1048576
net.core.rmem_max=1048576
net.core.wmem_default=262144
net.core.wmem_max=262144
3、添加以下内容到/etc/security/limits.conf
oraclesoftnproc2047
oraclehardnproc16384
oraclesoftnofile1024
oraclehardnofile65536
4、添加以下内容到/etc/pam.d/login
sessionrequired/lib/security/pam_limits.so
sessionrequiredpam_limits.so
5、添加以下内容到/etc/profile
if[$USER="oracle"];then
if[$SHELL="/bin/ksh"];then
ulimit-p16384
ulimit-n65536
else
ulimit-u16384-n65536
fi
fi
6、创建安装目录
#mkdir-p/u01/app/oracle
#chown-Roracle:
oinstall/u01/app/oracle
#chmod-R775/u01/app/oracle
7、修改oracle环境变量,首先进入oracle用户模式,vi~/.bash_profile,在里面加入以下内容
exportORACLE_BASE=/u01/app/oracle
exportORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
exportORACLE_SID=DB99
exportPATH=$ORACLE_HOME/bin:
$PATH
exportLD_LIBRARY_PATH=$ORACLE_HOME/lib:
/usr/lib
exportLC_CTYPE=en_US.UTF-8
exportNLS_LANG=AMERICAN_AMERICA.ZHS16GBK
exportLANG=AMERICAN_AMERICA.ZHS16GBK
exportLC_ALL=C
8、安装数据库
#gunzip10201_database_linux_x86_64.cpio.gz(64位)
#cpio-idmv<10201_database_linux_x86_64.cpio
#vidatabase/install/oraparam.ini
[CertifiedVersions]
Linux=redhat-3,SuSE-9,redhat-4,redhat-5,UnitedLinux-1.0,asianux-1,asianux-2]
再添加:
[Linux-redhat-5.0-optional]
TEMP_SPACE=80
SWAP_SPACE=150
MIN_DISPLAY_COLORS=256
vi/etc/sysconfig/vncservers
添加
VNCSERVERS="1:
oracle"
VNCSERVERARGS[1]="-geometry800x600-nolistentcp-nohttpd-localhost"
使用oracle用户(su–oracle)启动vnc服务(vncserver)
将.vnc/.xstart中的twm&改成gnome-session&
然后用vncviewer连接服务器运行database目录下的runinstaller
第一个界面选择AdvancedInstallation
第三个界面需要在语言选项中添加中文支持
在提示是否创建新库时,选择installdatabasesoftwareonly
安装结束时注意安装程序会提示用root用户执行下面两条命令:
/u01/app/oracle/oraInventory/orainstRoot.sh
/u01/app/oracle/product/10.2.0/db_1/root.sh
主数据库(简称dbtest1)备用数据库(简称dbtest2)
在dbtest1上安装数据库环境并创建数据库(数据库sid为DB99,安装目录为/u01/app/)
在dbtest2上只安装数据库环境,不创建数据库
下面是dbtest1上的配置
首先用sqlplus/assysdba进入sql查询模式
主库启用FORCELOGGING
SQL>ALTERDATABASEFORCELOGGING;
SQL>selectFORCE_LOGGINGfromv$database;
主库检查密码文件
这个默认安装完之后都有,文件在/u01/app/oracle/product/10.2.0/db_1/dbs/orapwDB99
文件名格式为orapw${sid}
主库添加standbyredolog
SQL>alterdatabaseaddstandbylogfilegroup4('/u01/app/oracle/oradata/DB99/redo04.log')size50m;
SQL>alterdatabaseaddstandbylogfilegroup5('/u01/app/oracle/oradata/DB99/redo05.log')size50m;
SQL>alterdatabaseaddstandbylogfilegroup6('/u01/app/oracle/oradata/DB99/redo06.log')size50m;
SQL>alterdatabaseaddstandbylogfilegroup7('/u01/app/oracle/oradata/DB99/redo07.log')size50m;
查看日志情况
sql>select*fromv$logfile;
执行后应该能看到你新加的这四个日志相关信息
修改主数据库初始化参数
先执行SQL>createpfilefromspfile;
这样就会有/u01/app/oracle/product/10.2.0/db_1/dbs/initDB99.ora文件
直接编辑这个文件
加入以下参数
*.db_unique_name=dbtest1
*.fal_server='dbtest1'
*.fal_client='dbtest2'
*.standby_file_management=auto
*.db_file_name_convert='/u01/app/oracle/oradata/DB99/','/u01/app/oracle/oradata/DB99/'
*.log_file_name_convert='/u01/app/oracle/oradata/DB99/','/u01/app/oracle/oradata/DB99/'
*.log_archive_config='dg_config=(dbtest1,dbtest2)'
*.log_archive_dest_2='service=dbtest2LGWRSYNCAFFIRMvalid_for=(online_logfiles,primary_role)db_unique_name=dbtest2'
*.log_archive_dest_state_2='ENABLE'
这样初始化参数改好了
使用命令
Sql>shutdownimmediate
Sql>createspfilefrompfile;
修改/u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora下的监听文件
listener.ora文件如下
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
(PROGRAM=extproc)
)
(SID_DESC=
(SID_NAME=DB99)
(ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
)
)
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC2))
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.21)(PORT=1521))
)
)
修改/u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora文件如下
DB99=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.21)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=DB99)
)
)
#LISTENER_DB99=
#(ADDRESS=(PROTOCOL=TCP)(HOST=localhoenorthdb1)(PORT=1521))
DBTEST2=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.24)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=DB99)
)
)
DBTEST1=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.21)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=DB99)
)
)
EXTPROC_CONNECTION_DATA=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC2))
)
(CONNECT_DATA=
(SID=PLSExtProc)
(PRESENTATION=RO)
)
)
这样参数文件就改完了
主库启用归档日志
SQL>STARTUPMOUNT;
SQL>ALTERDATABASEARCHIVELOG;
SQL>ALTERDATABASEOPEN;
SQL>Alterdatabasesetstandbydatabasetomaximizeavailability;
注意执行过alterdatabasearchivelog;后以后就不用再执行这个命令了,以后直接用startup启动数据库就可以了
用rman备份主库数据文件、归档日志、控制文件
在oracle用户环境下,执行
rmantarget/
然后执行
rman>backupdatabaseplusarchivelog;
rman>backupcurrentcontrolfileforstandby;
这样就会在/u01/app/oracle/flash_recovery_area/DB99下生成备份,包括数据文件,控制文件和归档日志
下面对备库进行操作
由于备库没有创建实例,所以缺少几个文件目录
用oracle用户添加
对应主库的目录结构添加
/u01/app/oracle/admin/DB99下的adump,bdump,cdump,udump
/u01/app/oracle/flash_recovery_area/
/u01/app/oracle/oradata/DB99
从主库dbtest1复制文件到备用库dbtest2上
需要复制/u01/app/oracle/flash_recovery_area/下的所有东西
还有/u01/app/oracle/product/10.2.0/db_1/dbs/下的所有东西
主库上的/u01/app/oracle/product/10.2.0/db_1/network/admin目录下的listener.ora和tnsnames.ora
备库修改如/u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora下
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
(PROGRAM=extproc)
)
(SID_DESC=
(SID_NAME=DB99)
(ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)
)
)
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC2))
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.24)(PORT=1521))
)
)
注:
和主库相同只有ip不同
tnsnames.ora如下
DB99=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.24)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=DB99)
)
)
#LISTENER_DB99=
#(ADDRESS=(PROTOCOL=TCP)(HOST=localhoenorthdb1)(PORT=1521))
DBTEST2=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.24)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=DB99)
)
)
DBTEST1=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.21)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=DB99)
)
)
EXTPROC_CONNECTION_DATA=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC2))
)
(CONNECT_DATA=
(SID=PLSExtProc)
(PRESENTATION=RO)
)
)
注:
和主库一样,只有ip不同
恢复备用库
在恢复备份库的时候先把主库和备库的监听程序重启一下
方法,在oracle用户模式下lsnrctlstop,然后lsnrctlstart
然后再回到备库
启动数据库到nomount阶段
sqlplus/assysdba
sql>startupnomount
再回到oracle用户模式
从rman恢复
rmantargetsys/userjishubu@dbtest1auxiliary/
rman>duplicatetargetdatabaseforstandbynofilenamecheck;
开始进行恢复数据库
修改备库的参数文件
直接编辑这个文件/u01/app/oracle/product/10.2.0/db_1/dbs/initDB99.ora
修改以下参数
*.db_unique_name=dbtest2
然后执行
sql>shutdownimmediate;
sql>createspfilefrompfile;
启动备用库
sqlplus/assysdba
sql>shutdownimmediate;
sql>startupnomount;
sql>alterdatabasemountstandbydatabase;
sql>ALTERDATABASEADDSTANDBYLOGFILE;
sql>ALTERDATABASEADDSTANDBYLOGFILE;
sql>ALTERDATABASEADDSTANDBYLOGFILE;
sql>ALTERDATABASEADDSTANDBYLOGFILE;
sql>alterdatabaserecovermanagedstandbydatabaseusingcurrentlogfiledisconnectfromsession;
这样Dataguard的最大可用模式实时备份就完成了
下面进行一下测试
在两边都执行
Sql>Archiveloglist
看看返回的结果
我的结果是
主库
SQL>archiveloglist
DatabaselogmodeArchiveMode
AutomaticarchivalEnabled
ArchivedestinationUSE_DB_RECOVERY_FILE_DEST
Oldestonlinelogsequence17
Nextlogsequencetoarchive19
Currentlogsequence19
备库
SQL>archiveloglist
DatabaselogmodeArchiveMode
AutomaticarchivalEnabled
ArchivedestinationUSE_DB_RECOVERY_FILE_DEST
Oldestonlinelogsequence18
Nextlogsequencetoarchive0
Currentlogsequence19
如果没出现数字,在oracle用户模式下lsnrctlstop,然后lsnrctlstart
看我所标示的地方是否数字一致,说明已经同步了
然后看主库执行
Sql>select protection_level,protection_mode from v$database;
结果为
SQL>selectprotection_level,protection_modefromv$database;
PROTECTION_LEVELPROTECTION_MODE
----------------------------------------
MAXIMUMAVAILABILITYMAXIMUMAVAILABILITY
如果是这样的结果.两个显示都是高可用模式,那么说明应该配置正确了
再做测试,再主库上插入用户并添加表
然后在备库上执行
Sql>alterdatabaserecovermanagedstandbydatabasecancel;
Sql>alterdatabaseopenreadonly;
连接备库看看有没有你新加的用户名和表,如果都同步过来了,说明配置正确,一切正常了
ALTERDATABASECOMMITTOSWITCHOVERTOPRIMARY;
select*fromv$archive_gap;
selectSEQUENCE#fromV$ARCHIVED_LOG;
补充知识,关于大于2TB的硬盘如何分区,fdisk已经不能用了,方法如下
假设要用parted对Linux下的/dev/sdb(大小为3000G)进行分区操作:
1、进入系统,在#提示符下执行:
parted/dev/sdb
2、建立磁盘label:
mklabelGPT
3、按p键,查看磁盘可用空间,显示单位为M。
3000G应该显示大致为:
/dev/sdb的磁盘几何结构:
0.000-3000000.000兆字节
4、创建分区:
在(parted)后输入:
mkpart并按照提示操作:
分区类型?
primary/主分区/extended/扩展分区?
p(如果要创建扩展分区此处输入e)。
文件系统类型?
[ext2]?
(这里直接回车,千万不要改成ext3,分区创建完毕后通过mkfs.ext3/dev/sdb*建立文件系统)
起始点?
0.000(加入要建立一个10G的分区)
结束点?
10240.000
5、按p键查看刚创建的分区是否已经成功。
6、如果成功,键入quit退出parted。
7、使用mkfs.ext3/dev/hdb*来创建文件系统
8、挂载并