一个看似诡异的Oracle连接问题

简介:    我们知道Oracle在启动的时,fork进程会根据ORACLE_SID来创建相关后台进程,而在Unix和Linux系统中,ORACLE SID和ORACLE_HOME在一起哈希后会得到一个唯一的值作为SGA的key。

   我们知道Oracle在启动的时,fork进程会根据ORACLE_SID来创建相关后台进程,而在Unix和Linux系统中,ORACLE SID和ORACLE_HOME在一起哈希后会得到一个唯一的值作为SGA的key。

   所以我抛出一个蛮有意思的问题,在同一台服务器上,存在10g,11g多个ORACLE_HOME,是可以创建多个同名的Oracle实例,而如果在同一个用户下(比如操作系统用户是oracle),是否可能创建出两个同名的实例来?

   我想你的脑海中已经有了答案。我换一个角度来说明是否可以。通过一个蛮有意思的DG配置问题。

  我在使用RMAN的duplicate搭建备库的时候抛出了下面的一个错误。

RMAN> duplicate target database for standby from active database nofilenamecheck;
Starting Duplicate Db at 2017-08-03 10:40:42
RMAN-03002: failure of Duplicate Db command at 08/03/2017 10:40:42
RMAN-05501: aborting duplication of target database
RMAN-06403: could not obtain a fully authorized session
RMAN-04006: error from auxiliary database: ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory

看错误很明显,备库是被启动,找不到内存结构了。

但是实际上查看数据库进程,是没有问题的。

而我根据服务名尝试连接,下面的结果让我大跌眼镜。

sqlplus sys@s2Queuedb as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Thu Aug 3 10:41:53 2017
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Enter password:
Connected to an idle instance.

这是哪里的问题呢,是不是实例名有大小写的拆吧呢,在我的印象中似乎没有。那我索性就在这个窗口下尝试启动,没想到还真起来了一个新的实例。

SQL> startup nomount
ORACLE instance started.
Total System Global Area 9620525056 bytes
Fixed Size                  2261368 bytes
Variable Size            2248150664 bytes
Database Buffers         7348420608 bytes
Redo Buffers               21692416 bytes

你看这下同一个用户下有两个同名的实例了。

$ ps -ef|grep smon|grep -v grep
oracle    43259      1  0 10:39 ?        00:00:00 ora_smon_Queuedb
oracle    43337      1  0 10:44 ?        00:00:00 ora_smon_Queuedb

到了这里,不要以为是bug,也不要认为以前的这些基础知识都不奏效了。我们梳理一下思路。

首先ORACLE_SID是统一的,是同一个,而不同之处就是ORACLE_HOME了。而这个数据库环境我只安装了一个版本的数据库环境,所以不存在多个ORACLE_HOME,所以这个问题让我很纠结,我们继续来看看ORACLE_HOME的情况,可以查看环境变量的值。

$ cat /proc/43259/environ |xargs -0 -n1 |grep ORACLE_HOME
ORACLE_HOME=/U01/app/oracle/product/11.2.0.4

查看另外一个实例的ORACLE_HOME变量的值。

$ cat /proc/43337/environ |xargs -0 -n1 |grep ORACLE_HOME
ORACLE_HOME=/home/U01/app/oracle/product/11.2.0.4

到了这里,似乎有了眉目,原来是ORACLE_HOME不一样。

而问题到了这里还是有些奇怪,因为/home/U01和/U01是指向的同一个目录。他们代表的含义是一样的。

lrwxrwxrwx    1 root root     9 Aug  1 17:53 U01 -> /home/U0

这个问题到了这里该这么解释呢,我们继续理一下思路。我们在RMAN使用duplicate的时候是使用TNS连接方式的,那么TNS连接在连接本地实例的时候指向了另外一个实例(尽管刚开始这个实例不存在),那么本地的连接配置其实还是在listener.ora里面。

打开静态注册的内容,这样一看就很清楚了。

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = Queuedb)
      (ORACLE_HOME = /home/U01/app/oracle/product/11.2.0.4)
      (SID_NAME = Queuedb)
    )
  )

所以了解了这个问题,我们可以换个思路想想有什么场景可以把这个特点发扬光大,在一些特定的场景中起到神助攻的作用。

至少在之前的数据迁移中,我是使用多个版本的ORACLE_HOME来达到同服务器多实例的切换,能够极大的提高数据迁移的效率。





目录
相关文章
|
6月前
|
SQL Oracle 关系型数据库
本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库
本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库
145 0
|
7月前
|
Oracle 关系型数据库 流计算
Flink CDC不支持直接连接到Oracle ADG备库进行数据同步
Flink CDC不支持直接连接到Oracle ADG备库进行数据同步
124 1
|
4天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
14 6
|
2月前
|
Oracle Java 关系型数据库
SpringBoot整合Mybatis连接Oracle数据库
SpringBoot整合Mybatis连接Oracle数据库
SpringBoot整合Mybatis连接Oracle数据库
|
2月前
|
Oracle 关系型数据库 MySQL
Flink CDC产品常见问题之使用cdc-Oracle连接器报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
Flink CDC产品常见问题之使用cdc-Oracle连接器报错如何解决
|
5月前
|
SQL Oracle 关系型数据库
[已解决]使用sqlplus连接oracle,提示ORA-01034和ORA-27101
[已解决]使用sqlplus连接oracle,提示ORA-01034和ORA-27101
57 0
|
5月前
|
Oracle 小程序 关系型数据库
laravel5.8(十四)连接oracle数据库
首先确定你的PHP已经支持oracle数据库的链接。PHP需要安装OCI8扩展。 确定PHP可以链接ORACLE数据库之后。我们使用composer安装laravel支持oracle链接的插件 yajra/laravel-oci8 欢迎访问个人博客 guanchao.site 欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的” 一:使用composer安装 yajra/laravel-oci8 1 :运行如下命令: bash 复制代码 composer require yajra/laravel-oci8 2 :安装过程中可能会报错,不要纠结那些报错,最简单的解决办法:
90 0
|
5月前
|
Oracle 关系型数据库 Python
python连接oracle12c
python连接oracle12c
40 0
|
6月前
|
Oracle 关系型数据库 数据库
Navicat连接Oracle报错:Oracle library is not loaded
Navicat连接Oracle报错:Oracle library is not loaded
121 0
|
6月前
|
Oracle 关系型数据库 数据库
Navicat连接Oracle数据库
Navicat连接Oracle数据库