您的位置:首页 > 数据库 > Oracle

Oracle中各种name

2013-09-06 16:15 260 查看
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>
5SERVICE_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为设置的参数值;
同时数据库服务名可以与数据库名不相同。
PropertyDescription
Parameter typeString
SyntaxSERVICE_NAMES =db_service_name[,db_service_name[ ... ] ]
Default valueDB_UNIQUE_NAME.DB_DOMAIN if defined
ModifiableALTER SYSTEM
Range of valuesAny ASCII string or comma-separated list of string names
BasicNo
Real Application ClustersDo 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_domainservice_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且值不同。
6db_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 ALTER DATABASE statement, 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 ALTER DATABASE statementto change the domain in a database global name. Note that after the database iscreated, changing the initialization parameter DB_DOMAIN has noeffect on the global database name or on the resolution of database link names.
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> ALTER DATABASE RENAME GLOBAL_NAME TO ORACLE.US.ORACLE.COM;
Database altered.
修改成功后查看修改后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> alter database rename global_name to ORACLE.US.ORACLE.COM;
Database altered.
查看修改后的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> alter database rename global_name to ORACLE;
Database altered.
修改后查询结果未变。
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 Area  595591168bytes
Fixed Size                  1220748bytes
Variable Size             243273588bytes
Database Buffers          343932928bytes
Redo Buffers                7163904bytes
Database mounted.
Database opened.
SQL>
该条语句不能将global_name设置为空(
 update global_name
[code]set
global_name=''
),若设置为空将导致数据库无法启动。[/code]
注:数据库版本为10g
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  db_name service_name