相关文章推荐

Oracle RAC客户端tnsnames.ora连接串配置和试验

本次试验是搭建好RAC后使用客户端连接RAC数据库并模拟单节点故障后的连接状态。具体过程记录如下:

TNS简要介绍与应用

Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器。

TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC。如果通过TNS连接Oracle,那么客户端必须安装Oracle client程序。

Oracle当中,如果想访问某个服务器,必须要设置TNS,它不像SQL SERVER那样在客户端自动列举出在局域网内所有的在线服务器,只需在客户端选择需要的服务器,然后使用帐号与密码登录即可。而Oracle不能自动列举出网内的服务器,需要通过读取TNS配置文件才能列出经过配置的服务器名。

配置文件名一般为:tnsnames.ora,默认路径为:%ORACLE_HOME%\network\admin\tnsnames.ora

  1. 查看服务器端/etc/hosts文件:

     [root@rac1 ~]# cat /etc/hosts
     127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
     ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
     #public ip
     10.16.35.60  rac1
     10.16.35.61  rac2
     #virtual ip
     10.16.35.62  rac1-vip
     10.16.35.63  rac2-vip
     #scan ip
     10.16.35.64  rac19c-scan
     #private ip
     10.10.16.155  rac1-priv
     10.10.16.156  rac2-priv
    

    可以看到两节点的虚拟IP分别是10.16.35.62、10.16.35.63。

  2. 查看服务端的local _ listener和remote_listener参数

     SQL> show parameter listener;   //节点1
     NAME                                 TYPE        VALUE
     ------------------------------------ ----------- ------------------------------
     forward_listener                     string
     listener_networks                    string
     local_listener                       string       (ADDRESS=(PROTOCOL=TCP)(HOST=
                                                      10.16.35.62)(PORT=1521))
     remote_listener                      string       rac19c-scan:1521
     SQL> show parameter listener;  //节点2
     NAME                                 TYPE        VALUE
     ------------------------------------ ----------- ------------------------------
     forward_listener                     string
     listener_networks                    string
     local_listener                       string       (ADDRESS=(PROTOCOL=TCP)(HOST=
                                                      10.16.35.63)(PORT=1521))
     remote_listener                      string       rac19c-scan:1521
    
  3. 客户端tnsnames.ora配置参考

    Oracle 10g版本的监听配置需要分别配上各节点的虚拟IP(VIP),配置如下:

     racdb =
       (DESCRIPTION =
         (ADDRESS = (PROTOCOL = TCP)(HOST = 10.16.35.62)(PORT = 1521))
         (ADDRESS = (PROTOCOL = TCP)(HOST = 10.16.35.63)(PORT = 1521))
         (LOAD_BALANCE = yes)      //开启负载
         (CONNECT_DATA =
           (SERVER = DEDICATED)		//专用服务器,一个客户端连接对应一个服务器进程
           (SERVICE_NAME = racdb)   //对应数据库的服务名
           (FAILOVER_MODE =      //连接失败后处理的方式 
                (TYPE = session) //TYPE =SESSION表示当一个连接好的会话的实例发生故障,系统会自动将会话切换到其他可用的实例,前台应用无须再度发起连接,但会话正在执行的SQL 需要重新执行
                (METHOD = basic) //表示初始连接就连接一个接点 
                (RETRIES = 180)  //连接失败后重试连接的次数 
                (DELAY = 5)    //连接失败后重试的延迟时间(以秒为单位)
    

    Oracle 11g之后的版本的监听配置只需要配上SCAN IP就可以了,不用分别配上各节点的虚拟IP(VIP),配置如下:

     racdb_scan =
        (DESCRIPTION =
     	(ADDRESS_LIST =
     	(ADDRESS = (PROTOCOL = TCP)(HOST = 10.16.35.64)(PORT = 1521))
         (CONNECT_DATA =
     	(SERVICE_NAME = racdb)  //对应数据库的服务名
     	(FAILOVER_MODE =   //连接失败后处理的方式 
     	(TYPE = session) //TYPE =SESSION表示当一个连接好的会话的实例发生故障,系统会自动将会话切换到其他可用的实例,前台应用
     	(METHOD = basic) //表示初始连接就连接一个接点 
     	(RETRIES = 180)  //连接失败后重试连接的次数 
     	(DELAY = 5) //连接失败后重试的延迟时间(以秒为单位)
    

    业务分割,固定连接节点1,只需要配置节点1的虚拟IP,配置如下:

     racdb1 =
       (DESCRIPTION =
         (ADDRESS_LIST =
           (ADDRESS = (PROTOCOL = TCP)(HOST = 10.16.35.62)(PORT = 1521))
         (CONNECT_DATA =
           (SID = racdb1)
           (SERVER = DEDICATED)
    

    failover故障转移功能测试实验

    使用PLSQL登录RAC数据库后,显示登录节点为节点1
    plsql1

    服务器上关闭节点1实例:

    [grid@rac1 ~]$ srvctl stop  instance -d racdb -i racdb1    //关闭节点1    
    [grid@rac1 ~]$ srvctl status instance -d racdb -i racdb1
    Instance racdb1 is not running on node rac1
    

    可以看到连接的状态变为节点2了,状态为正常,测试的结果显示连接RAC数据库故障时能自动转移至正常节点,
    plsql2

    rac环境下的JDBC连接的问题

    RAC环境下一个实例就对应一个SID,但是service_ name只有一个,如果使用SID的话就达不到双机的效果了,所以必须使用service_name连接数据库。

    jdbc连接Oralce有三种方式:

    格式一:jdbc:oracle:thin:@//<host>:<port>/<service_name>
    格式二:jdbc:oracle:thin:@<host>:<port>:<SID> 
    格式三:jdbc:oracle:thin:@<TNSName> 
    

    RAC环境下使用第一种,这里部署的service_ name是racdb,单节点使用第二种,SID为service_ name1或者service_ name2.

    Oracle RAC客户端tnsnames.ora连接串配置和试验Oracle RAC客户端tnsnames.ora连接串配置和试验TNS简要介绍与应用配置过程failover故障转移功能测试实验rac环境下的JDBC连接的问题Oracle RAC客户端tnsnames.ora连接串配置和试验本次试验是搭建好RAC后使用客户端连接RAC数据库并模拟单节点故障后的连接状态。具体过程记录如下:T... 在安装之前,在安装Oracle数据库的服务器上导航到下面的目录。 将listener.oratnsnames.ora中的host中的localhost都改为机器的IP地址,我的为192.168.1.102 而后开始安装Oracle客户 选择定制,可以自己定义安装的组件。 取消对Oracle Scheduler Agent组件的选择。 进行到80%的时候,会运行下面的配置程序。(一般隐藏在当前界面之后,不要在当前界面傻等啊,呵呵)
    在部署RAC集群时,共使用到了以下几个IP: Public IP:公网IP,是网卡的真实IP,Oracle通过公网IP对外提供服务; Virtual IP:虚拟IP,是在Public IP的基础上,虚拟出的IP,无需在网卡中进行配置,当集群中一台服务出现问题时,该服务上的VIP会自动飘逸到其他主机上,进而确保客户通过VIP连接时不受单节点故障影响; Private IP:私有IP,主要用于集群间的心跳检测和数据同步,为网卡的真实IP,对于客户来说,可以忽略; SCAN IP:Single Client
    (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)   Oracle客户安装了之后,要连接数据库,但是要知道数据库在哪呀。 数据库相当于是一个娱乐场所(公司),实例是里面的美女,为客人提供服务的。 数据库应该称为数据库管理系统,数据库实例是系统中的进程,为客户提供服务。一个系统包含的东西有很多。注意区分数据库系统和数据库实例。 当你要找一个美女服务你时,你要知道娱乐场所在哪(IP地址),从哪里进去(口),美女的名字(实例名),美女的身份证号或者标识(实例标识符)。因为名字一样的人,一个闭月羞花,一个惨不忍睹。 客户连接数据库,要获取数据库系
    由于Oracle数据库通常需要在不同地方被访问,所以Oracle开发人员必须搞清楚数据库性能如何被网络通讯所影响。由Oracle提供的TNS(Transparent Network Substrate)允许不同数据库之间的分布式通讯。   作为一种分布式协议的TNS,允许远距离的系统之间的透明数据库通讯。TNS成为Oracle逻辑数据请求与远距离服务器的物理通讯之间的“绝缘体(insulator
    Oracle RAC提供两种方式实现负载均衡,第一种是纯技术手段,即在用户连接时,根据系统当前的负载情况决定由哪个节点处理用户请求;第二种是面向业务,人为的把应用切分成很多service,通过某个service过来的连接请求都由某个节点处理。下面来具体看看这两种手段: 纯技术手段 (面向连接的负载均衡) 1. 客户负载均衡配置方法是在客户tnsnames.ora文件中设置LOAD_BALANCE=YES,当客户发起连接时,会从地址列表中随机选取一个,把连接请求随机分散给各个实例。这个技术的最大缺点在于不能根据各个实例的真实负载情况来分散请求,太过粗糙,因此很少使用。 2. 服务器负载均
    plsql连接oracle数据库报ora 12154错误 今天遇到一个问题,使用sqlplus能够连接到远程的数据库,但是使用plsql却连接不上,报错”ORA-12154: TNS: 无法解析指定的连接标识符” 解决方法如下: 1.先检查服务器的监听服务是否打开,如果没有打开请启动其监听 客户:tnsping 服务器Linux下: #>lsnrctl status 查看监听状态 #>lsnrctl start 启动监听 2.通过Sql Plus连接一下试试,如果Sql Plus连接能成功,那就说明你的tnsnames.ora内容有错误 我的问题就在别名dev_db前
    但如果登陆数据库使用服务名方式,程序死活链接不上,原因, 说是因为Delphi ODAC与Oracle RAC Direct mode does not support RAC.YOU can connect only to one fixed server in RAC. ODAC 控件中的Direct模式不支持Oracle RAC,只能够链接一个确定的RAC实例。 如果要使用ODAC控件连接Oracle RAC,则需要Oracel安装客户,并且不使用Direct模式, 链接方式与ADO连接Oracle一致。 根据说明,安装Oracle客户,安装好之后,查找tnsnames.ora文件 在文件增加 DMSII= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.73)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.74)(PORT = 1521)) (LOAD_BALANCE = ON) (FAILOVER = ON) (CONNECT_DATA = (SERVICE_NAME = DMSII) (FAILOVER_MODE = (TYPE = select) (METHOD = BASIC) (RETRIES = 30) (DELAY = 5) 注意,DMSII前不能有空格 程序代码修改 orsn1.Username:=UserName; orsn1.Password:=PassWord; orsn1.Server:=服务名; orsn1.Connect oracle客户bai所需要的一个文件du,通过该文件可以配zhi置数据库的连接地址,配dao好后,不用再输入完整的oracle地址,直接用简易的字符代替即可。 如:本该是数据库地址为:127.0.1.1:1521/orcl,通过设置tnsnames.ora,为它起的别名为:cdbase,就可以用cdbase代替了。 可以用文本编辑工具或记事本打开,该文件用于配置数据库连接地址,数据库访问地址别名可以自定义。 cdbase= (DESCRIPTION =
    ORA-01155异常通常表示数据库文件处于不兼容状态,而关闭PDB时可能会导致该异常的发生。这可能是由于在关闭PDB之前,还有一些会话或事务在使用该PDB中的对象。在这种情况下,您可以尝试以下步骤来解决此问题: 1. 查找在关闭PDB之前正在使用PDB的会话或事务。您可以使用以下查询检查当前正在使用PDB的会话和事务: SELECT s.sid, s.serial#, s.username, s.program, t.used_urec, t.used_ublk FROM gv$session s, gv$transaction t WHERE s.taddr = t.addr AND s.con_id = <PDB ID>; 2. 等待所有正在使用PDB的会话和事务完成后,再关闭PDB。您可以使用以下命令等待所有正在使用PDB的会话和事务完成: ALTER SYSTEM CHECKPOINT; ALTER SYSTEM FLUSH BUFFER_CACHE; ALTER SYSTEM QUIESCE RESTRICTED; 3. 如果仍然无法关闭PDB,请尝试使用以下命令强制关闭PDB: ALTER PLUGGABLE DATABASE <PDB NAME> CLOSE IMMEDIATE; 请注意,这可能会导致数据丢失或数据库文件处于不兼容状态。因此,请在使用此命令之前备份数据库文件。
 
推荐文章