按照这里的定义:
An internal, uniquely generated number that differentiates databases. Oracle creates this number automatically when you create the database.
获取DBID的方法可参见这里。
示例,以下为2节点RAC,两个实例上执行的输出相同,因为是同一个数据库:
-- RAC 实例 1
SQL> select DBID from v$database;
DBID
----------
1037029797
-- RAC 实例 2
SQL> select DBID from v$database;
DBID
----------
1037029797
使用NID程序可以修改DBID, DBNAME。
唯一确定服务器上的数据库,也就是说,一个服务器上不能有两个数据库DB_NAME一样。
例如在RAC中,两个实例上的DB_NAME是一样的:
SQL> select name from v$database;
NAME
---------
DBRAC
使用NID程序可以修改DBID, DBNAME。
唯一确定数据库中的实例。本例中就是DB_NAME加数字序号。
例如:
-- RAC 实例 1 或 2
SQL> select instance from v$thread;
INSTANCE
--------------------------------------------------------------------------------
DBRAC1
DBRAC2
-- RAC 实例 1
SQL> show parameter instance_number
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_number integer 1
SQL> SELECT sys_context('userenv','instance_name') FROM dual;
SYS_CONTEXT('USERENV','INSTANCE_NAME')
--------------------------------------------------------------------------------
DBRAC1
-- RAC 实例 2
SQL> show parameter instance_number
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_number integer 2
SQL> SELECT sys_context('userenv','instance_name') FROM dual;
SYS_CONTEXT('USERENV','INSTANCE_NAME')
--------------------------------------------------------------------------------
DBRAC2
可以看一下这篇文章。
唯一确定数据库,例如在多服务器的分布式系统中。格式为DB_NAME.DB_DOMAIN,详见Global Database Name Explained (Doc ID 115499.1)。
在RAC中所有实例的输出都一样:
SQL> show parameter domain
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_domain string sub07281611220.training.oracle
vcn.com
SQL> SELECT * FROM global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
DBRAC.SUB07281611220.TRAINING.ORACLEVCN.COM
SQL> SELECT * FROM props$ WHERE name='GLOBAL_DB_NAME';
NAME
--------------------------------------------------------------------------------
VALUE$
--------------------------------------------------------------------------------
COMMENT$
--------------------------------------------------------------------------------
GLOBAL_DB_NAME
DBRAC.SUB07281611220.TRAINING.ORACLEVCN.COM
Global database name
使用ALTER DATABASE RENAME GLOBAL_NAME可以改名。
数据库的全局唯一名称:
SQL> show parameter DB_UNIQUE_NAME
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string DBRAC_21c
如何修改参考MOS文档:How to change the DB_UNIQUE_NAME in a RAC database (Doc ID 1604421.1)
从文档可知:
Databases with the same DB_NAME within the same DB_DOMAIN (for example, copies of a database created for reporting or a physical standby) must have a unique DB_UNIQUE_NAME. Every database’s DB_UNIQUE_NAME must be unique within the enterprise.
这个参数应该和DG相关,也就是说,主备库的DB_NAME和DB_DOMAIN相同,但DB_UNIQUE_NAME必须不同。
主库:
-- DBID相同
SQL> select DBID from v$database;
DBID
----------
2501127265
-- DBNAME相同
SQL> select name from v$database;
NAME
---------
DB193H1
-- 实例名相同
SELECT sys_context('userenv','instance_name') FROM dual;
-- Same
SQL> show parameter domain
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_domain string
SQL> show parameter DB_UNIQUE_NAME
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string DB193H1_STDBY
SQL> show parameter DB_UNIQUE_NAME
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string DB193H1
备库:
SQL> select DBID from v$database;
DBID
----------
2501127265