Chinaunix首页 | 论坛 | 博客
  • 博客访问: 100281
  • 博文数量: 25
  • 博客积分: 1724
  • 博客等级: 上尉
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-09 10:55
文章分类
文章存档

2014年(1)

2010年(1)

2008年(23)

分类: 其他平台

2014-03-12 15:43:49

xxxx灾难备份解决方案

一.        设备环境
主库:IBM小型机P670 两台,配置了HA,安装了数据库软件ORACLE9207 做了RAC集群        。通过光纤交换机连接存储,配置了两个卷组p1datavg 、p1archvg,其中p1datavg 用来存放数据文件,p1archvg用来存放归档日志。
备库:IBM 小型机P740一台,未配置HA,通过主库现有的环境做tar包复制了ORACLE9207,使用的是单实例。通过光纤交换机连接存储,配置了两个卷组datavg、archvg,其中datavg用来存放数据文件,archvg用来存放归档日志。

二.        网络环境
主库:两块网卡,一块接入局里内网,另外一块作为rac的心跳
内网地址:10.21.0.1 10.21.0.2
心跳地址:192.168.1.1 192.168.1.2
备库:一块网卡,接入局里内网
内网地址:10.21.16.251

三.        配置过程
aix5.2做的oracle9207tar包拷贝到aix5.3上进行配置:
在配置过程中遇到几个问题:
$ sqlplus
exec(): 0509-036 Cannot load program sqlplus because of the following errors:
        0509-130 Symbol resolution failed for /usr/lib/libc.a[aio_64.o] because:
        0509-136   Symbol kaio_rdwr64 (number 0) is not exported from
                   dependent module /unix.
        0509-136   Symbol listio64 (number 1) is not exported from
                   dependent module /unix.
        0509-136   Symbol acancel64 (number 2) is not exported from
                   dependent module /unix.
        0509-136   Symbol iosuspend64 (number 3) is not exported from
                   dependent module /unix.
        0509-136   Symbol aio_nwait (number 4) is not exported from
                   dependent module /unix.
        0509-136   Symbol aio_nwait64 (number 5) is not exported from
                   dependent module /unix.
        0509-136   Symbol aio_nwait_timeout (number 6) is not exported from
                   dependent module /unix.
        0509-136   Symbol aio_nwait_timeout64 (number 7) is not exported from
                   dependent module /unix.
        0509-026 System error: Error 0
        0509-192 Examine .loader section symbols with the
                 'dump -Tv' command.
2个服务器的版本完全一致,都是AIX 5.3。
从错误信息上看,很多AIO相关的SYMBOL找不到,导致错误。和AIO的配置有关。通过smit aio看到aio是AVAILABLE的。因此怀疑aio service没有正常启动,执行mkdev -l aio0后,系统正常。

在从生产环境复制过来配置好环境变量之后,使用 sqlplus 登录出现错误

SQL> conn / as sysdba
exec(): 0509-036 Cannot load program oraclejftest because of the following errors:
        0509-150   Dependent module libha_em_r.a(shr_64.o) could not be loaded.
        0509-022 Cannot load module libha_em_r.a(shr_64.o).
        0509-026 System error: A file or directory in the path name does not exist.
ERROR:
ORA-12547: TNS:lost contact

这个错误应该是由于生产环境是rac,而当前环境是单实例所导致的,应该重新编译ins_rdbms.mk

$ make -f  ins_rdbms.mk rac_off
$make -f ins_rdbms.mk ioracle

在此期间发现编译有问题,无法通过,估计是aix5.3这个系统安装的时候缺少了必要的包,根据资料发现aix上安装oracle至少需要如下的包: 
lslpp -l bos.adt.base bos.adt.lib bos.adt.libm bos.perf.perfstat bos.perf.libperfstat bos.perf.proctools bos.adt.prof bos.cifs_fs.rte 

执行以上命令发现系统缺少包 bos.adt.libm ,目前需要安装介质来将该包进行安装 

经过跟厂商协商,厂商终于提供出了aix5.3的安装光盘,DVD 2张,在cd1上找到下面这个包:
bos.adt.data 

虽然我们系统中缺少的包是 bos.adt.libm,但是这个包在cd1上面是无法找到的,因为这个包已经包含在了bos.adt.data这个包中,该包大小约为35m,可以将这个包通过ftp上传到aix主机的目录/tmp下面,然后按照下面的方法进行安装:
输入smitty installp进行安装;
选择install and Update from LATEST Available Software;
输入安装文件所在目录[/tmp],按F4进入安装软件列表,利用F7选择所要安装的软件包,回车确认;

在安装完成这个包之后,我们以oracle用户登录,执行sqlplus之后,内容如下:
SQL> conn / as sysdba
exec(): 0509-036 Cannot load program oraclejftest because of the following errors:
        0509-150   Dependent module libha_em_r.a(shr_64.o) could not be loaded.
        0509-022 Cannot load module libha_em_r.a(shr_64.o).
        0509-026 System error: A file or directory in the path name does not exist.
ERROR:
ORA-12547: TNS:lost contact  

错误依旧存在,这就需要我们将oracle进行relink来重新编译,具体方法如下:

$cd $ORACLE_HOME/rdbms/lib
$ vi env_rdbms.mk

找到其中含有的"-lha_gs64_r -lha_em_r"的这行数据,将""中的内容清空保存,然后执行如下操作:

$ make -f env_rdbms.mk
$ make -f ins_rdbms.mk rac_off
$ make -f ins_rdbms.mk ioracle

在做完上面的操作之后,我们需要做relink:

$ relink all

在这个relink的过程中可能会出现如下的错误:

ld: 0711-101 FATAL ERROR: Allocation of 16204512 bytes failed
in routine init_symtab_info. There is not enough memory available. 

这个问题的解决方案如下:

1 - set LDR_CNTRL to MAXDATA=0x40000000
in the applmgr main shell script.

$ export  LDR_CNTRL="MAXDATA=0x40000000"


This is set in your login shell env (applmgr) that you use to run adadmin/adpatch.
You can set at the command line or add to your .profile or it can be added to
the apps env file.
2 - Once set you can check using command 'echo $LDR_CNTRL' at the unix prompt.
It should display -
MAXDATA=0x40000000

3 - try to relink or apply the patch again
WARNING现象是可以忽略的。可参考METALINK文档Note:330990.1 

在经过这个处理之后,我们需要再执行一次relink:

$ relink all
这次就没有问题了,正常编译通过。
然后我们执行sqlplus,显示结果如下:
SQL> conn / as sysdba

终于出现了连接到空实例的提示信息了,至此本次的tar复制完成了。

根据前两节所述,目前在aix5.3上面已经配置好了存储,oracle软件,接下来需要开始我们的灾备系统的配置

生产环境采用的oracle版本为9i,dg配置起来比较方便,只需要修改几个参数即可
主库 pfile  内容如下:
*.background_dump_dest='/orasys/OraHome/admin/oral/bdump'
*.cluster_database_instances=2
*.cluster_database=TRUE
oral1.cluster_interconnects='192.168.1.1:192.168.2.1'
oral2.cluster_interconnects='192.168.1.2:192.168.2.2'
*.compatible='9.2.0.7.0'
*.control_files='/dev/rora_cntrl1_256','/dev/rora_cntrl2_256','/dev/rora_cntrl3_
256'
*.core_dump_dest='/orasys/OraHome/admin/oral/cdump'
*.db_block_size=8192
*.db_cache_advice='ON'
*.db_cache_size=3221225472
*.db_domain=''
*.db_file_multiblock_read_count=32
*.db_name='oral'
oral2.event='10841 trace name context forever'
*.fast_start_mttr_target=300
*.global_names=FALSE
*.hash_join_enabled=TRUE
oral2.instance_name='oral2'
oral1.instance_name='oral1'
oral2.instance_number=2
oral1.instance_number=1
*.java_pool_size=377487360
*.job_queue_processes=60
*.large_pool_size=335544320
oral1.local_listener='LISTENER_ORAL1'
oral2.local_listener='LISTENER_ORAL2'
*.log_archive_dest_1='LOCATION=/arch/arch'
oral2.log_archive_dest_1='LOCATION=/arch/arch'
*.log_archive_dest_2='SERVICE=stdby reopen=60'
*.log_archive_dest_3='SERVICE=stdby1 reopen=60'
*.log_archive_start=TRUE
*.open_cursors=1000
*.open_links_per_instance=20
*.open_links=50
*.optimizer_index_cost_adj=30
*.pga_aggregate_target=3429496729
*.processes=2500
*.query_rewrite_enabled='FALSE'
*.remote_listener='LISTENERS_ORAL'
*.remote_login_passwordfile='exclusive'
*.session_cached_cursors=1000
*.shared_pool_size=512000000
*.sort_area_size=6291456
*.star_transformation_enabled='FALSE'
oral2.thread=2
oral1.thread=1
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_suppress_errors=FALSE
oral2.undo_tablespace='UNDOTBS2'
oral1.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/orasys/OraHome/admin/oral/udump'

备库pfile 内容如下:

*.background_dump_dest='/orasys/OraHome/admin/oral/bdump'
*.cluster_database_instances=1
*.cluster_database=FALSE
*.compatible='9.2.0.7.0'
*.control_files='/dev/rora_cntrl1_256','/dev/rora_cntrl2_256','/dev/rora_cntrl3_256'
*.core_dump_dest='/orasys/OraHome/admin/oral/cdump'
*.db_block_size=8192
*.db_cache_advice='ON'
*.db_cache_size=3221225472
*.db_domain=''
*.db_file_multiblock_read_count=32
*.db_file_name_convert='/dev','/orasys/oradata'
*.db_name='oral'
oral2.event='10841 trace name context forever'
*.fal_client='PRIMARY'
*.fal_server='STDBY','STDBY1'
*.fast_start_mttr_target=300
*.global_names=FALSE
*.hash_join_enabled=TRUE
*.instance_name='oral'
*.instance_number=1
*.java_pool_size=377487360
*.job_queue_processes=60
*.large_pool_size=335544320
*.log_archive_dest_1='LOCATION=/orasys/arch'
*.log_archive_start=TRUE
*.log_file_name_convert='/dev','/orasys/oradata'
*.open_cursors=1000
*.open_links_per_instance=20
*.open_links=50
*.optimizer_index_cost_adj=30
*.pga_aggregate_target=3429496729
*.processes=2500
*.query_rewrite_enabled='FALSE'
*.remote_listener='LISTENERS_ORAL'
*.remote_login_passwordfile='exclusive'
*.session_cached_cursors=1000
*.shared_pool_size=512000000
*.sort_area_size=6291456
*.standby_archive_dest='/orasys/arch'
*.standby_file_management='AUTO'
*.star_transformation_enabled='FALSE'
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_suppress_errors=FALSE
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/orasys/OraHome/admin/oral/udump'
这里主要想讲一下几个参数:
*.db_file_name_convert='/dev','/orasys/oradata'  表示的是如果生产环境跟灾备所存放的数据文件目录不同,需要通过这个参数来转换
*.log_file_name_convert='/dev','/orasys/oradata'表示的是如果生产环境跟灾备所存放的日志文件目录不同,需要通过这个参数来转换

*.fal_client='PRIMARY' 表示的是日志传输源点为主库
*.fal_server='STDBY','STDBY1' 表示的是日志传输目标点为两个地方,stdby为一套灾备系统,stdby1为另外的一套灾备系统,
也就是说本生产系统同时往两个灾备系统传输日志,就算是其中一套灾备损坏了,还有另外一套灾备系统可以使用。 


在上面几个参数文件配置好之后,生产环境会自动从主库将rman备份之后产生的归档日志复制到两个目标点stdby stdby1,无需手动复制,我们可以在两个灾备数据库上使用下面的命令来查看日志传输是否有错误。
select message from v$dataguard_status;

最后,我们按照修改好的pfile文件启动备用数据库,并将其置为自动应用归档日志模式:
SQL> startup nomount pfile=/orasys/stdpfile.ora
SQL> alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session;
阅读(1899) | 评论(0) | 转发(0) |
0

上一篇:在裸设备上面安装oracle10g

下一篇:没有了

给主人留下些什么吧!~~