1. 背景及问题
今天在Oracle BCV技术[1]做数据同步,建立生产库的测试库,需要DBA配合同步前后的停库和起库。在同步完起库后,有部门反应同步好的测试库连接不上去。
2. 问题排查
以我当前的知识储备,能想到的可能就是以下几点进行检查:
-
数据库实例状态,是不是没有open ---> select status from v$instance;
-
监听器状态,是不是监听没起来 ---> lsnrctl status|start
-
Oralce黑白名单配置问题 ---> $ORACLE_HOME/network/admin/sqlnet.ora
-
客户端 tnsnames.ora 配置问题,连接符写错了 ---> tnsping
-
网络连接问题,端口是否开放 ---> ping IP 、 telnet IP 1521
这些都不是,由于情况紧急,测试环境等着用,部门同事再三提示下,我还是不知道他们说的那个参数---LOCAL_LISTENER,这个就是引起这次数据库连接不上的罪魁祸首,导师一下就解决了👍!
我把生产的服务名拿到测试库注册了,导致测试库没有对外提供网络连接,只能通过本地访问数据库,通过将LOCAL_LISTENER该参数重置成默认参数、置空或者修改测试库的服务名就解决了,总之就是使测试库对外提供网络连接,但上面的问题还存在一个非常大的安全隐患,下面细说
3. 事后回顾
今天这个任务的流程是这样的:停库 ---> BCV同步测试数据 ---> 起库,1、3步骤是需要DBA配合来做的,因为是从其他库同步过来的数据,再数据库启动阶段Oracle会做一个数据库启动验证,其实就是对比各个文件数据是否一致,是否需要恢复,首先Oracle启动时会检查数据文件头中的checkpoint cnt是否与对应控制文件中的checkpoint cnt一致,如果一致,进行第二次检查,数据文件头的开始scn和对应控制文件中的结束scn是否一致,如果结束scn等于开始scn,则不需要要对那个文件进行恢复,没问题启动数据库。
我拿其中一部分操作步骤来说今天这次事故发生的原因:
刚刚从生产同步过来的测试库,需要经历启动验证这个阶段,回过来,数据库起库三阶段,
-
加载参数文件 --》startup nomount
-
加载控制文件 --》startup mount
-
加载数据文件等所有文件--》startup (打开到open)
同步过来的测试库可能有日志文件不一致,先以RESETLOGS方式起库
扩展一:Resetlogs 与 NoResetlogs 的区别
alter database open RESETLOGS;
找到测试库控制文件位置,在后面的参数文件修改成本库的
show parameter control_files
重点来了,关库,去同步的生产库创建一份参数文件:
cr