首页 > 数据库 >ORACLE数据库中ORACLE_SID与INSTANCE_NAME的差异

ORACLE数据库中ORACLE_SID与INSTANCE_NAME的差异

时间:2023-04-09 13:07:21浏览次数:37  
标签:NAME instance INSTANCE SID ORACLE name

ORACLE数据库中ORACLE_SID与INSTANCE_NAME在概念和意义上有什么异同呢?下面简单来总结概况一下,很多时候,不少人都搞不清楚两者的异同,甚至认为两者是等价的。

ORACLE_SID与INSTANCE_NAME的异同

ORACLE_SID参数是操作系统的环境变量,用于和操作系统进行交互。也用于定义一些数据库参数文件的名称。

例如 init<ORACLE_SID>.ora ,spfile<ORACLE_SID>.ora等。

有些目录名称也跟ORACLE_SID有关。例如参数core_dump_dest对应的目录中会包含ORACLE_SID名称的文件夹(mydb)。

SQL> show parameter core_dump_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
core_dump_dest                       string      /opt/oracle19c/diag/rdbms/mydb
                                                 /mydb/cdump
SQL>

另外,ORACLE_SID其实主要用于本地连接,例如,一台服务器上有多个Oracle实例,我们必须使用ORACLE_SID来识别区分。它的值一般位于/etc/oratab,~/.bash_profile中,不同操作系统可能有所不同。后面我们会详细讲述。

INSTNACE_NAME是参数文件(pfile&spfile)中的一个初始化参数,它用来标识数据库实例的名称,其缺省值就是ORACLE_SID,所以很多时候我们认为实例名就是ORACLE_SID, 不同的实例可以拥有相同的INSTANCE_NAME。官方文档的解释如下:

Note: The SID identifies the instance's shared memory on a host, but may not uniquely distinguish this instance from other instances.

实例的SID

注:数据库实例的SID标识主机上实例的共享内存,但不能将此实例与其他实例区分开来。

总统来说,INSTANCE_NAME是Oracle数据库参数。而ORACLE_SID是操作系统的环境变量。 默认情况下,INSTANCE_NAME和在环境变量里面配置的ORACLE_SID是同样的名称。(注:正是由于这个原因,网上有些资料说SID就是INSTANCE_NAME,但是需要注意的是,实际上INSTANCE_NAME不等于ORACLE_SID。前者是数据库层面的概念,后者是操作系统中环境变量的设置。)

ORACLE_SID is used to distinguish this instance from other Oracle Database instances that you may create later and run concurrently on the same host computer. The maximum number of characters for ORACLE_SID is 12, and only letters and numeric digits are permitted. On some platforms, the SID is case-sensitive.

INSTANCE_NAME与ORACLE_SID默认情况下是相同的。其实ORACLE_SID与INSTANCE_NAME本来没有什么关系。当操作系统与数据库交互时,用的是ORACLE_SID,而当外部连接于数据库进行交互时用的是INSTANCE_NAME。当同一台服务器安装了多个数据库时,操作系统利用ORACLE_SID来区分不同实例的进程,而当我们与这台服务器的不同的数据库进行连接时,用INSTANCE_NAME来决定具体连接哪个数据库:在监听器动态注册时还会用于向监听器注册

另外,需要注意的是v$instance下instance_name与参数instance_name的区别,v$thread中instance与instance_name的区别,下面我们来演示一下:

$ echo $ORACLE_SID
mydb
$ env |grep ORACLE_SID
ORACLE_SID=mydb

SQL> set linesize 640;
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
mydb

1 row selected.

SQL> select instance from v$thread;

INSTANCE
------------------------------------------------------------------
mydb

1 row selected.

SQL> show parameter instance_name;

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------
instance_name                        string      mydb
SQL>

然后我们修改一下参数instance_name的值:

SQL> alter system set instance_name=kerry_test scope=spfile;

重启数据库实例后,我们再验证确认一下啊。如下所示:

SQL> set linesize 640;
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
mydb

1 row selected.

SQL> select instance from v$thread;

INSTANCE
--------------------------------------------------------------------
mydb

1 row selected.

SQL> show parameter instance_name;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      KERRY_TEST
SQL>
SQL> col value for a30;
SQL> select value from v$parameter where name='instance_name';

VALUE
------------------------------
KERRY_TEST

1 row selected.

SQL>

如上所示,v$instance中的instance_name的值其实是ORACLE_SID的值,v$thread中的instance值也是ORACLE_SID的值,而不是参数instance_name的值。

查看ORACLE_SID的值

Window平台

方法1:注册表查看

HKEY_LOCAL_MACHINE > SOFTWARE > ORACLE> KEY_xxxxx

例子:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB19Home1 下查看ORACLE_SID

方法2

echo %ORACLE_SID%

如果没有设置环境变量的话,这个方法是无效的。一般我们需要通过注册表来查看。如果没有设置环境变量,我们可以使用命令设置当前窗口的ORACLE_SID值

set ORACLE_SID=gsp

方法3:

select instance from v$thread;

方法4:

select instance_name from v$instance;

Linux/Unix平台

方法1: echo $ORACLE_SID

例子:

$ echo $ORACLE_SID
gsp

方法2:

ps -ef | grep ora_pmon_ | grep -v grep

例子:

如下所示,这个HP-UX上有两个实例,你如果用方法1,只能看到当前的ORACLE_SID

$ ps -ef | grep ora_pmon_ | grep -v grep
oracle    5732     1  0 Sep06 ?        00:05:14 ora_pmon_hsfa
oracle   14458     1  0 Aug18 ?        00:05:55 ora_pmon_ctest

在多实例中切换,可以使用下面命令:

export $ORACLE_SID=ctest

例子:当前环境的ORACLE_SID为mydb

$ ps -ef | grep ora_pmon_ | grep -v grep
oracle   32272     1  0 17:07 ?        00:00:01 ora_pmon_mydb

方法3:

/etc/oratab

注意,从配置文件/etc/oratab查询ORACLE_SID,只能说可以,并不一定就能准确找出,例如,多实例的环境。这个只是仅供参考的方法。

方法4:

select instance from v$thread;

方法5:

select instance_name from v$instance;

ORACLE数据库中ORACLE_SID与INSTANCE_NAME的差异_数据库

扫描上面二维码关注我


标签:NAME,instance,INSTANCE,SID,ORACLE,name
From: https://blog.51cto.com/u_15338523/6178761

相关文章

  • ORA-01578: ORACLE data block corrupted
    环境:LINUX 6.5+EBSR12.2.0(数据库:11G (11.2.0.3))1、数据库启动失败。 ORA-00604:erroroccurredatrecursiveSQLlevel1ORA-01578:ORACLEdatablockcorrupted(file#5,block#96539)ORA-01110:datafile5:‘/u1/ebs/db/PROD/data/system05.dbf’  ......
  • ModuleNotFoundError: No module named ‘cx_oracle‘
    【解决方案1】:我找到的解决方案。在我们之前的项目目录中,我们有一个名为cx_Oracle.pyd 的文件以及instantclient_12_1 的InstantClient文件夹。只要存在这两件事,我们的目录似乎就可以在我们所有的远程机器上工作,即使有问题的机器除了项目目录中的文件之外没有在venv或I......
  • 容器安全之启用用户命名空间(user namespace)
    20、容器安全之启用用户命名空间20.1、说明1、在hostnamespace中运行容器因为用户的uid在整个节点上是共享的,容器里的uid与宿主机的uid可能会有冲突。容器内的root用户就是宿主机的root用户,容器内uid=1000的用户就是宿主机uid=1000的用户。docker的守护进程是root权限......
  • Serilog.Sinks.Elasticsearch 写username到 ES失败
    Usingthelib:Serilog.Sinks.ElasticsearchandECS-dotnet whichprovidetheecsformat,wecanwritelogintoesinECSformat.Ihavebeenabletooveralllinktrace, now,Iwanttorecordtheusernameifuserhaslogged.Astonoshingly,sometime,itwor......
  • oracle, mysql, clickhouse创建表的DDL语句参考
    这里展示的oracle,mysql,clickhouse下面如何创建一个表的DDL语句。请注意这里的数据类型,在不同的表,表示形式不一样。   Oracle的DDL语句 --UPCENTER.PUB_PLATE_INFOdefinitionCREATETABLE"UPCENTER"."PUB_PLATE_INFO"("ISVALID"NUMBER(1,0)NO......
  • Oracle操作总结
    Oracle操作总结目录Oracle操作总结一、Oracle表操作1.建表2.修改表名3.修改字段名4.修改数据类型5.增加字段6.删除字段7.多表关联更新二、sqlldr导入数据到Oracle库中1.sqlldr语句2.执行语句参考文档:https://blog.csdn.net/dingguanyi/article/details/82259685一、Oracle表操......
  • Oracle中的单行函数
    一.定义单行函数为查询的表或视图的每一行返回一个结果行。这些函数可以出现在可以出现在SELECT列中,WHERE子句,STARTWITH和CONNECTBY子句以及HAVING子句中。单行函数大致分为:数值函数,字符函数,日期时间函数,转换函数,和通用函数。二.数值函数数值函数接受数值输......
  • [paper reading]|IC-FPS: Instance-Centroid Faster Point Sampling Module for 3D Po
    摘要:本文说首次实现了大规模点云场景中基于点的模型的实时检测(<30ms);首先指出FPS采样策略进行下采样是耗时的,尤其当点云增加的时候,计算量和推理时间快速增加;本文提出IC-FPS;包含两个模块:localfeaturediffusionbasedbackgroundpointfilter(LFDBF);CentroidInstanceSampl......
  • error TS9005: Declaration emit for this file requires using private name 'xxx'.
    errorTS9005:Declarationemitforthisfilerequiresusingprivatename'distance'.Anexplicittypeannotationmayunblockdeclarationemit.代码如下:/***计算两个坐标之间的距离*@parampnt1*@parampnt2*@returns{number}*@constructor*/expor......
  • Oracle JDK 和 OpenJDK 有什么区别?
    可能在看这个问题之前很多人和我一样并没有接触和使用过OpenJDK。那么OracleJDK和OpenJDK之间是否存在重大差异?下面我通过收集到的一些资料,为你解答这个被很多人忽视的问题。对于Java7,没什么关键的地方。OpenJDK项目主要基于Sun捐赠的HotSpot源代码。此外,OpenJDK......