Oracle中各种name
Oracle中各种name1. DB_NAME
DB_NAME必须设置为不超过8个字符的文本字符串(可以包含警号、美元符号、数字、下划线),当数据库创建的时候DB_NAME被记录与控制文件、数据文件、在线日志文件中。如果数据库启动时参数文件中pfile或spfile中的DB_NAME与控制文件中的DB_NAME不一致,那么将无法启动数据库。
SQL> showparameter db_name
NAME TYPE VALUE
----------------------------------------------- ------------------------------
db_name string ORACLE
SQL> selectname from v$database;
NAME
---------
ORACLE
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
----------------------------------------------- ------------------------------
instance_name string ORACLE
SQL> selectinstance_name from v$instance;
INSTANCE_NAME
----------------
ORACLE
SQL> selectvalue from v$parameter where name='instance_name';
VALUE
--------------------------------------------------------------------------------
ORACLE
SQL>
3. ORALCE_SID
ORACLE_SID是操作系统的环境变量设置,用于和操作系统交互,其取值可以与INSTANCE_NAME相同,select instance_name from v$instance 这个是来自os的oracle_sid。初始化参数instance_name , show parameter instance_name , 或者select value from v$parameter wherename=‘instance_name’所得到的值来源于数据库。ORACLE_SID在这里用于标示进程,而instance_name则用来标示实例。两者可以具有不同的名称。
本例中ORACLE_SID=’ORACLE’,修改数据启动参数文件添加instance_name=’JASON’,重启数据库再次查看instance_name如下:
SQL> selectinstance_namefrom v$instance;
INSTANCE_NAME
----------------
ORACLE instance_name仍为ORACLE,来自操作系统 oracle_sid
SQL> showparameter instance_name;
NAME TYPE VALUE
----------------------------------------------- ------------------------------
instance_name string JASON实例名发生变更
SQL> selectvalue from v$parameter where name='instance_name';
VALUE
--------------------------------------------------------------------------------
JASON 实例名发生变更
SQL>
4. db_domain
DB_DOMAIN 类似于网络域名一样,指明数据库在一个网络结构中的逻辑位置。
通过如下命令可以查看DB_DOMAIN
SQL> showparameter db_domain
NAME TYPE VALUE
----------------------------------------------- ------------------------------
db_domain string ORACLE.COM
SQL>
5、SERVICE_NAMES
SERVICE_NAMES指定了一个或多个服务名用于客户端连接到实例,实例注册服务名到监听中。当客户端请求连接时,监听将根据服务名将客户端请求连接到对应的实例。
如果未设置SERVICE_NAMES参数,未设置db_domain,则SERVICE_NAMES为db_name;
如果未设置SERVICE_NAMES参数,设置db_domain,则SERVICE_NAMES为db_name.db_domain;
设置SERVICE_NAMES参数,设置db_domain,则SERVICE_NAMES为设置的参数值;
设置SERVICE_NAMES参数,未db_domain,则SERVICE_NAMES为设置的参数值;
同时数据库服务名可以与数据库名不相同。
Property
Description
Parameter type
String
Syntax
SERVICE_NAMES=
db_service_name[,db_service_name[ ... ] ]
Default value
DB_UNIQUE_NAME.DB_DOMAIN if defined
Modifiable
ALTERSYSTEM
Range of values
Any ASCII string or comma-separatedlist of string names
Basic
No
Real Application Clusters
Do not set the SERVER_NAMES parameterfor Real Application Clusters (RAC). Instead, define services using DatabaseConfiguration 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
--------------------------------------------------------------------------------
ORACLE
SQL> showparameter service_names;
NAME TYPE VALUE
----------------------------------------------- ------------------------------
service_names string ORACLE
SQL>
那么此时在监听注册的service_names为ORACLE。
(2)、设置db_domain=’ORACLE.COM’,未设置service_names参数
SQL> showparameter service_names;
NAME TYPE VALUE
----------------------------------------------- ------------------------------
service_names string ORACLE.ORACLE.COM
SQL>
那么此时在监听注册的service_names为ORACLE.ORACLE.COM
(3)、设置db_domain=’ORACLE.COM’,设置service_names=’TEST’
SQL> showparameter service_names;
NAME TYPE VALUE
----------------------------------------------- ------------------------------
service_names string TEST
SQL>
那么此时在监听注册的service_names为TEST.ORACLE.COM
(4)、未设置db_domain,设置service_names=’TEST’
SQL> showparameter service_names;
NAME TYPE VALUE
----------------------------------------------- ------------------------------
service_names string TEST
SQL>
那么此时在监听注册的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
----------------------------------------------- ------------------------------
db_unique_name string ORACLE
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
------------------------------------ -----------------------------------------
db_domain string AU.ORACLE.COM
SQL>
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
--------------------------------------------------------------------------------
ORACLE.AU.ORACLE.COM
修改global_name为ORACLE.US.ORACLE.COM。
SQL>>
Database> 修改成功后查看修改后global_name。
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
--------------------------------------------------------------------------------
ORACLE.US.ORACLE.COM
修改后查看db_domain未发生变化,因此global_name的修改不会影响参数db_dbmain的值。
SQL> SHOW PARAMETER DB_DOMAIN;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_domain string AU.ORACLE.COM
SQL>
(2)、修改数据库global_name,查看db_link变化。
查看本地数据库global_name及db_domain.
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
--------------------------------------------------------------------------------
ORACLE.AU.ORACLE.COM
SQL> show parameter db_domain
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_domain string AU.ORACLE.COM
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
--------------------------------------------------------------------------------
HQ.AU.ORACLE.COM
SQL>
再次修改global_name为ORACLE.US.ORACLE.COM
SQL>>
Database> 查看修改后的global_name信息。
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
ORACLE.US.ORACLE.COM
再次查看db_domain,发现db_domain参数值不受global_name值改变而改变。
SQL> show parameter db_domain;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
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> select db_link from user_db_links;
DB_LINK
--------------------------------------------------------------------------------
SUPPLY.US.ORACLE.COM
HQ.AU.ORACLE.COM
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$
--------------------------------------------------------------------------------
ORACLE.US.ORACLE.COM
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
ORACLE.US.ORACLE.COM
(4)、如何去掉db_domain.
关于global_name,就是DB_DOMAIN一旦加上。通过设置DB_DOMAIN的方式与通过ALTER DATABASE RENAME GLOBAL_NAME TO的方式无法进行恢复。只能通过updateglobal_name set global_name='xxx'更新视图进行修改。
如下:
查看当前global_name
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
ORACLE.US.ORACLE.COM
修改当前global_name为db_name。
SQL>>
Database> 修改后查询结果未变。
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
ORACLE.US.ORACLE.COM
通过更新视图方式进行修改如下操作,同时更新成功后数据库可以正常启动。
SQL> update global_name set global_name='ORACLE';
1 row updated.
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
ORACLE
SQL> commit;
Commit complete.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area595591168bytes
Fixed>
Variable>
Database Buffers 343932928bytes
Redo Buffers 7163904bytes
Database mounted.
Database opened.
SQL>
该条语句不能将global_name设置为空( update global_name set global_name=''),若设置为空将导致数据库无法启动。
注:数据库版本为10g。
页:
[1]