网站首页 > 技术文章 正文
我们知道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/U01
这个问题到了这里该这么解释呢,我们继续理一下思路。我们在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来达到同服务器多实例的切换,能够极大的提高数据迁移的效率。
猜你喜欢
- 2025-07-10 Oracle 与 Google Cloud 携手大幅扩展多云服务
- 2025-07-10 分享收藏的 oracle 11.2.0.4各平台的下载地址
- 2025-07-10 Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务
- 2025-07-10 Oracle Database@Azure 推进到南美等新区域并增加了新服务
- 2025-07-10 Oracle宣布推出 Oracle Database@AWS 的有限预览版
- 2025-07-10 Oracle与Nextcloud合作,推出主权云上的安全协作平台
- 2025-07-10 NodeRED魔改版连接MsSql、PostgreSQL、MySQL、OracleDB存储无忧
- 2024-10-19 「AWEI」Oracle12c初体验之新建数据库和用户并连接
- 2024-10-19 php7 怎么连接oracle 11g php oracle 连接池
- 2024-10-19 使用JDBC连接ORACLE的三种URL格式
你 发表评论:
欢迎- 07-10Oracle 与 Google Cloud 携手大幅扩展多云服务
- 07-10分享收藏的 oracle 11.2.0.4各平台的下载地址
- 07-10Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务
- 07-10Oracle Database@Azure 推进到南美等新区域并增加了新服务
- 07-10Oracle宣布推出 Oracle Database@AWS 的有限预览版
- 07-10Oracle与Nextcloud合作,推出主权云上的安全协作平台
- 07-10NodeRED魔改版连接MsSql、PostgreSQL、MySQL、OracleDB存储无忧
- 07-10对于企业数据云备份,“多备份”承诺的是成本更低,管理更高效#36氪开放日深圳站#
- 601℃几个Oracle空值处理函数 oracle处理null值的函数
- 593℃Oracle分析函数之Lag和Lead()使用
- 581℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 578℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 573℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 566℃【数据统计分析】详解Oracle分组函数之CUBE
- 552℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 547℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- Oracle 与 Google Cloud 携手大幅扩展多云服务
- 分享收藏的 oracle 11.2.0.4各平台的下载地址
- Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务
- Oracle Database@Azure 推进到南美等新区域并增加了新服务
- Oracle宣布推出 Oracle Database@AWS 的有限预览版
- Oracle与Nextcloud合作,推出主权云上的安全协作平台
- NodeRED魔改版连接MsSql、PostgreSQL、MySQL、OracleDB存储无忧
- 对于企业数据云备份,“多备份”承诺的是成本更低,管理更高效#36氪开放日深圳站#
- 解读丨《归档文件整理规则》— 电子文件元数据存储
- Data Guard跳归档恢复的实践(dataguard failover)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (57)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)