最近在做数据库迁移并升级,采用了duplicate方式。以往都是在目标端做目标库的静态监听。但该方法需要在目标端reload监听,当目标端所在主机有其他实例在跑时,reload监听会影响其他库提供服务。通过请教同事及查询资料,发现了UR=A这个参数。总结如下:
1、源端配置UR=A时,可远程连接非open的目标端实例,并进行管理操作;
2、目标端在没有注册静态监听时,若监听为非默认监听(名称不是listener,端口不是1521)需要在参数文件中指定local_listener,否则实例启动后并没有注册到监听;
3、目标端service_names需要与global_name保持一致,两端tnsnames.ora中条目也需与global_name保持一致,否则目标端实例重启后连接失败。未测试
4、最新发现,duplicate时必须使用spfile。如果用pfile,则在create spfile from memory时报ORA 12514错误。
duplicate成功一次之后,只要使用spfile,则即使没有local listener和remote listener也可以。
总结成功时的设置:
local_listener、remote_listener、spfile、remote_os_authent=TRUE、tnsnames.ora中service_name与db_unique_name保持一致。
怀疑是remote_os_authent这个废弃参数的问题。
duplicate时,必须指定controlfile位置,否则duplicate过程中实例会down,复制中断。
以上是duplicate复制standby时候的设置。实际中发现如果仅是复制库(不是备库),还是需要创建静态监听。因为复制过程中辅助实例会重启。
以下是转载的文章内容。
在Oracle Database 10g 中使用新的UR=A参数
---------------------------------------
如果正在使用实例注册,则listener.ora文件中默认为没有任何数据库条目,可以在侦听程序中手工配置数据库条目,
或者
可以使用新的Oracle Database 10g参数UR=A更新tnsnames.ora文件。该参数允许只进行管理性的连接。
1.在动态监听中,只有设置了(UR=A)才能够远程访问ASM实例;
2.在静态监听中,无论是否设置(UR=A)均可远程访问ASM实例,甚至可以使用easy connect方法方法ASM实例。
在tnsnames.ora文件中添加(UR=A),则可以远程访问ASM实例。
另外maclean也给出了相应的解释:
当数据库nomount,mount或者restricted时,动态监听显示状态为BLOCKED时,客户端可通过配置UR=A进行连接。
如下:
SQL> startup nomount; ORACLE instance started. Total System Global Area 939495424 bytes Fixed Size 2233960 bytes Variable Size 562039192 bytes Database Buffers 369098752 bytes Redo Buffers 6123520 bytes SQL> ALTER SYSTEM REGISTER; System altered. [oracle@rhl6 ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 15-JUL-2014 08:41:00 Copyright (c) 1991, 2011, Oracle. All rights reserved. Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.3.0 - Production Start Date 15-JUL-2014 08:40:23 Uptime 0 days 0 hr. 0 min. 37 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Log File /u01/app/oracle/diag/tnslsnr/rhl6/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rhl6.0x64)(PORT=1521))) Services Summary... Service "ora11gr2" has 1 instance(s). Instance "ora11gr2", status BLOCKED, has 1 handler(s) for this service... The command completed successfully
客户端配置
bbed_ur = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.154)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ora11gr2) (UR=A) ) ) bbed = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.154)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ora11gr2) ) )
C:\Users\YallonKing>sqlplus sys/oracle@bbed as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期二 7月 29 14:15:24 2014 Copyright (c) 1982, 2010, Oracle. All rights reserved. ERROR: ORA-12528: TNS: 监听程序: 所有适用例程都无法建立新连接 请输入用户名: C:\Users\YallonKing>sqlplus sys/oracle@bbed_ur as sysdba SQL*Plus: Release 11.2.0.1.0 Production on 星期二 7月 29 14:15:28 2014 Copyright (c) 1982, 2010, Oracle. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select status from v$instance; STATUS ------------------------ STARTED SQL> alter database mount; 数据库已更改。 SQL> alter database open; 数据库已更改。 SQL> select open_mode from v$database; OPEN_MODE -------------------- READ WRITE SQL> select status from v$instance; STATUS ------------ OPEN
原文地址:http://feed.askmaclean.com/archives/tnsname%E4%B8%ADura%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8.html