Oracle中各种name 1. DB_NAME
DB_NAME必须设置为不超过8个字符的文本字符串(可以包含警号、美元符号、数字、下划线),当数据库创建的时候DB_NAME被记录与控制文件、数据文件、在线日志文件中。如果数据库启动时参数文件中pfile或spfile中的DB_NAME与控制文件中的DB_NAME不一致,那么将无法启动数据库。
SQL> showparameter db_name
NAME TYPE VALUE
SQL> 2. INSTANCE_NAME
实例是ORACLE数据库的一组进程和内存区域的集合,用于和操作系统间联系。数据库名与实例名之间的关系一般是一一对应关系,有一个数据库名就有一个实例名,但是在RAC环境中一个数据库可以有多个实例。要和一个数据库服务器相连,必须知道INSTANCE_NAME,光知道数据库名是没用的。在9i中instance_name参数值在参数文件中默认设定。在10g中instance_name参数值未在参数文件中设定,那么默认由sid来决定(10g中可以在参数文件中设定instance_name的值),在实例启动过程中,Oracle从SID中来获得这个参数值,从而可以用于动态注册。此外Oracle的监听器(listener)配置文件中的SID_NAME就是来自instance_name参数,监听器通过instance_name才能确定需要将连接请求注册到哪一个实例上。如果初始化参数文件设置了instance_name参数,那么实例名为该参数的值。ORALCE_SID与SID具有相同的值,数据库启动时需要利用oracle_sid来查找初始化参数文件来启动数据库。
SQL> showparameter instance_name;
NAME TYPE VALUE
同时数据库服务名可以与数据库名不相同。 Property Description Parameter type
String Syntax
SERVICE_NAMES = db_service_name[,db_service_name[ ... ] ] Default value
DB_UNIQUE_NAME.DB_DOMAIN if defined Modifiable
ALTER SYSTEM Range of values
Any ASCII string or comma-separated list of string names Basic
No Real Application Clusters
Do not set the SERVER_NAMES parameter for Real Application Clusters (RAC). Instead, define services using Database Configuration Assistant (DBCA) and manage services using Server Control (SRVCTL) utility.
本例中ORACLE_SID=’ORACLE’,db_name=’ORACLE‘,下面4个实例中所说监听为动态监听下情况。 (1)、未设置db_domain及service_names参数
SQL> selectvalue from v$parameter where name='service_names';
VALUE
那么此时在监听注册的service_names为TEST.
备注:这里动态监听里注册的db_domain,来自于初始化参数db_domain。并非global_name中的db_domain,即使设置了global_name且值不同。 6、db_unique_name
DB_UNIQUE_NAM是10g的参数,在配置dataguard环境时,db_name相同,但是必须为处dg环境中每个数据库设置一个db_unique_name,当未设置db_unique_name时,默认与db_name相同。 Property Description Parameter type
String Syntax
DB_UNIQUE_NAME =database_unique_name Default value
Database instances: the value of DB_NAME
Automatic Storage Management instances: +ASM Modifiable
No Basic
Yes Real Application Clusters
Multiple instances must have the same value.
DB_UNIQUE_NAME specifies a globally unique name for the database. Databaseswith the same DB_NAME within the same DB_DOMAIN (for example, copies ofa database created for reporting or a physical standby) must have aunique DB_UNIQUE_NAME. Every database's DB_UNIQUE_NAME must be unique withinthe enterprise.
The value of DB_UNIQUE_NAME can be up to 30characters and is case insensitive. The following characters are valid in adatabase name: alphanumeric characters, underscore (_), number sign (#), anddollar sign ($).
SQL> showparameter db_unique_name;
NAME TYPE VALUE
SQL> 7、global_name
global_name由两部分组成,global_name=db_name.db_domain。db_domain参数仅在数据库创建时与db_name参数一起构成global_name,同时global_name值被存储于数据字典中。数据库创建后如果需要改变global_name值,可通过ALTER DATABASERENAME GLOBAL_NAME TO database.domain修改,通过修改初始化参数db_domain没有任何效果。db_domain参数修改需要重启数据库生效。如果在建立数据库的时候不指定DB_DOMAIN的值,则GLOBAL_NAME和DB_NAME的值一样。
官方解释如下:
The DB_DOMAIN initializationparameter is only important at database creation time when it is used, togetherwith the DB_NAME parameter, to form the database global name. At thispoint, the database global name is stored in the data dictionary. You mustchange the global name using an>not byaltering the DB_DOMAIN parameter in the initialization parameterfile. It is good practice, however, to change the DB_DOMAIN parameter toreflect the change in the domain name before the next database startup.
Use the> (1)、修改数据库global_name,查看db_domain 变化。
修改前
SQL> show parameter db_domain
NAME TYPE VALUE
SQL>
创建一个dblink,名称为hq.
SQL> create database link hq using 'sales';
Database link created.
查看视图查看创建成功的dblink信息,发现数据将自动补齐db_domain部分信息。
SQL> select db_link from user_db_links;
DB_LINK
db_domain string AU.ORACLE.COM
再次创建dblink名称为supply,并查看生成的dblink信息,发现创建dblink时若未指定db_domain时,数据库自动使用global_name中的db_domain补全dblink名而非使用db_domian值进行补充。
SQL> create database link supply using 'supply';
Database link created.
SQL> (3)、global_name的由来
global_name视图的创建语句如下:
create or replace view global_name
(global_name)
as
select value$ from sys.props$ where name = 'GLOBAL_DB_NAME'
我们看到global_name中的信息实际上是来自props$内部表的,取得的信息是其中的global_db_name字段。
SQL> select value$ from sys.props$ where name = 'GLOBAL_DB_NAME';
VALUE$