Oracle中各种name
2013-09-06 16:15
260 查看
Oracle中各种name1.
DB_NAME必须设置为不超过8个字符的文本字符串(可以包含警号、美元符号、数字、下划线),当数据库创建的时候DB_NAME被记录与控制文件、数据文件、在线日志文件中。如果数据库启动时参数文件中pfile或spfile中的DB_NAME与控制文件中的DB_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来查找初始化参数文件来启动数据库。
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如下:
DB_DOMAIN 类似于网络域名一样,指明数据库在一个网络结构中的逻辑位置。
通过如下命令可以查看DB_DOMAIN
SERVICE_NAMES指定了一个或多个服务名用于客户端连接到实例,实例注册服务名到监听中。当客户端请求连接时,监听将根据服务名将客户端请求连接到对应的实例。
本例中ORACLE_SID=’ORACLE’,db_name=’ORACLE‘,下面4个实例中所说监听为动态监听下情况。
(1)、未设置db_domain及service_names参数
6、db_unique_name
DB_UNIQUE_NAM是10g的参数,在配置dataguard环境时,db_name相同,但是必须为处dg环境中每个数据库设置一个db_unique_name,当未设置db_unique_name时,默认与db_name相同。
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 ($).
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 变化。
修改前
查看本地数据库global_name及db_domain.
global_name视图的创建语句如下:
关于global_name,就是DB_DOMAIN一旦加上。通过设置DB_DOMAIN的方式与通过ALTER DATABASE RENAME GLOBAL_NAME TO的方式无法进行恢复。只能通过updateglobal_name set global_name='xxx'更新视图进行修改。
如下:
查看当前global_name
注:数据库版本为10g。
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 | 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. |
(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. |
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';(4)、如何去掉db_domain.
VALUE$
--------------------------------------------------------------------------------
ORACLE.US.ORACLE.COM
SQL> select * from global_name; GLOBAL_NAME -------------------------------------------------------------------------------- ORACLE.US.ORACLE.COM
关于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。
相关文章推荐
- 认知Oracle各种Name
- Oracle中各种“name”
- oracle中各种“name”
- oracle的各种name(总结自warehouse)
- oracle的各种name(总结自warehouse)
- Oracle rman中set newname可能很慢
- (转)ORACLE中SID和SERVICE_NAME的区别
- 分清DB_NAME、INSTANCE_NAME、ORACLE_SID、SERVICE_NAME、DB_DOMAIN和GLOBAL_DB_NAME
- oracle中to_date方法的各种用法
- (oracle)invalid username/password:logon denied
- 【经典】c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)
- Oracle各种不正常现象解决方法
- oracle 的ORACLE_SID、INSTANCE_NAME、DB_NAME
- 各种数据库(oracle、mysql、sqlserver等)在Spring中数据源的配置和JDBC驱动包
- OAF-Error001:Oracle.apps.fnd.framework.OAException: Application: FND, Message Name: FND_GENERIC_MESS
- Oracle SERVICE_NAME, SID和schema…
- oracle不用tsname文件的时候着怎么办
- [数据库测试]强烈推荐一个python ODBC数据源插件,可支持Oracle,Db2,Mysql,Sql-server以及各种数据库版本,附例子和测试程序
- ORACLE各种文件常规恢复(最新整理)
- pd连接数据库生成pd图/各种数据库相互转换(以oracle->mysql为例)/导出成各种数据库脚本