Oracle db_name, db_unique_name, global_name的区别(三)

2014-11-24 09:06:41 · 作者: · 浏览: 2
lobal_name 全局数据库
global_name 是由db_name.db_domain构成的,doc如下:
Understanding How Global Database Names Are Formed
A global database name is formed from two components: a database name and a domain. The database name and the domain name are determined by the following initialization
parameters at database creation:
Database name DB_NAME Must be eight characters or less.
Domain containing the database DB_DOMAIN Must follow standard Internet conventions. Levels in domain names must be separated by dots and the order of domain names is
from leaf to root, left to right. us.acme.com
但是通过验证发现oracle并没有把db_name.db_domain和global_name 同步起来,不知道为什么?global_name oracle是通过提供了一个view,sys.global_name,该试图是源于props$的,可以查
看创建view的脚本,最终我们访问的是一个public synonym global_name:
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------
test1
这是为什么global_name 没有改变的原因:
The DB_DOMAIN initialization parameter is only important at database creation time when it is used, together with the DB_NAME parameter, to form the database global
name. At this point, the database global name is stored in the data dictionary. You must change the global name using an ALTER DATABASE statement, not by altering the
DB_DOMAIN parameter in the initialization parameter file. It is good practice, however, to change the DB_DOMAIN parameter to reflect the change in the domain name before
the next database startup.
不过我们也可以修改global_name:
SQL> alter database rename global_name to test1.com;
数据库已更改。
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------
TEST1.COM
SQL> alter database rename global_name to test123.com;
数据库已更改。
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------
test123.com
需要注意的是一旦加上了域就不能通过上面的命令去掉了,如:
SQL> alter database rename global_name to test123.com;
数据库已更改。
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------
TEST123.COM
SQL> alter database rename global_name to test1;
数据库已更改。
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------
TEST1.COM
SQL> alter database rename global_name to test123;
数据库已更改。
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------
TEST123.COM
不过可以直接update global_name 或者props$来去掉后缀:
SQL> update global_name set global_name='test1';
已更新 1 行。
SQL> commit;
提交完成。
SQL> select * from global_name;
GLOBAL_NAME
---------------------------------------------------------------
test1
global_name 的作用主要也是用在Distributed Database中,我只在高级复制中用过global_name
7、global_names 是一个布尔值,为什么要提它,是应为global_names和global_name看起来很相似,global_names的作用是创建db link时是否强制使用远程数据库的global_name,如果
global_names=true,则db link name必须要求是remote database的global_name,否则创建之后db link 不能连同,测试如下,缺省值是false
SQL> show parameter global_names
NAME TYPE VALUE
------------ ----------------------- -----------
global_names boolean TRUE
SQL> select count(*) from t_emp@dbl;
select count(*) from t_emp@dbl
*
第 1 行出现错误:
ORA-02085: 数据库链接 DBL 连接到 ORCL
SQL> col db_lin