oracle数据库的global_name,在database link与global_names参数一文中提到了,设置global_names初始化参数为true后,本地的数据库链接名称必须与远程数据库的global_name相同,才能正常使用数据库链接。那么怎么查询数据库的global_name呢? sql col global
oracle数据库的global_name,在database link与global_names参数一文中提到了,设置global_names初始化参数为true后,本地的数据库链接名称必须与远程数据库的global_name相同,才能正常使用数据库链接。那么怎么查询数据库的global_name呢?
sql> col global_name for a30
sql> select * from global_name;
global_name
------------------------------
dmdb
那么怎么样修改global_name?
alter database
rename global_name to new_name;
注意不要直接用update global_name set global_name=”将global_name设置为空,否则数据库不能启动,会报ora-00600[18061] 或 ora-00600[18062]这样的错误。 只有用备份进行恢复后才能打开。(参见metalink note 743676.1)。
那么global_name到底是个什么对象呢?
sql> select owner,object_name,object_type from dba_objects where object_name=’global_name’;
owner object_name object_type
---------- -------------------- --------------------
sys global_name view
public global_name synonym
sql> select text from dba_views where view_name=’global_name’;
text
----------------------------------------------------------------
select value$ from sys.props$ where name = ‘global_db_name’
可以看到global_name实际上是一个视图,来源于sys.props$表,而这个表是非常重要的一个关于数据库属性的表,不要随意更改此表的内容,否则将引起无可预料的、无法挽回的损失。
在用alert database rename global_name时,如果设置了global_name类似于”dmdb.com”这样的名称,则以后更改名称,则没有常规的办法去掉”.”分隔符了。
sql> select * from global_name;
global_name
------------------------------
dmdb
sql> alter database rename global_name to dmdb.com;
database altered.
sql> select * from global_name;
global_name
------------------------------
dmdb.com
sql> alter database rename global_name to dmdb.cn;
database altered.
sql> select * from global_name;
global_name
------------------------------
dmdb.cn
sql> alter database rename global_name to dmdb;
database altered.
sql> select * from global_name;
global_name
------------------------------
dmdb.cn
sql> alter database rename global_name to dm;
database altered.
sql> select * from global_name;
global_name
------------------------------
dm.cn
sql> alter database rename global_name to dm.com.cn;
database altered.
sql> select * from global_name;
global_name
------------------------------
dm.com.cn
sql> alter database rename global_name to dmdb;
database altered.
sql> select * from global_name;
global_name
------------------------------
dmdb.com.cn
sql> alter database rename global_name to dmdb.net;
database altered.
sql> select * from global_name;
global_name
------------------------------
dmdb.net
要去掉点分隔符,只有用update:
sql> update global_name set global_name=’dmdb’;
1 row updated.
sql> commit;
commit complete.
sql> select * from global_name;
global_name
------------------------------
dmdb
郑重提示:除非万不得已,不要去更新global_name视图,即时更新,也不要去更新global_name的基表props$,更不要将global_name更新为空。