Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2617885
  • 博文数量: 323
  • 博客积分: 10211
  • 博客等级: 上将
  • 技术积分: 4934
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-27 14:56
文章分类

全部博文(323)

文章存档

2012年(5)

2011年(3)

2010年(6)

2009年(140)

2008年(169)

分类: Oracle

2009-05-18 16:24:39

今天测试global_name的使用。发现修改后,无法还原。记录一下修改过程。
 
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
 
SQL> select * from global_name;
GLOBAL_NAME
-----------------------------------------------------------------------
ORASJH
 
SQL> alter database rename global_name to orasjh.oracle.com;
数据库已更改。
 
SQL> select * from global_name;
GLOBAL_NAME
-----------------------------------------------------------------------
ORASJH.ORACLE.COM
 
SQL> alter database rename global_name to orasjh;
数据库已更改。
 
SQL> select * from global_name;
GLOBAL_NAME
-----------------------------------------------------------------------
ORASJH.ORACLE.COM
 
--global_name无法修改成原来的值。郁闷...
 
到网上查了一下,也有人遇到这样的问题。解决方法是直接修改global_name这张表。我看了一下global_name的结构,只有一个字段。
 
SQL> desc global_name;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- -----------------
 GLOBAL_NAME                                        VARCHAR2(4000)
 
SQL> update global_name set global_name='ORASJH';
已更新 1 行。
 
SQL> COMMIT;
提交完成。
 
SQL> select * from global_name;
GLOBAL_NAME
-------------------------------------------------
ORASJH
 
--当global_names=true 或者 global_name有后缀,创建db link时db link 的名字都需要是对方的global_name。默认global_names是false。也就是说查询all_db_links db_link是带上.xxx的,但是实际上使用的时候不必带上.xxx,只是按照创建时候的名字使用就可以。
 
另外转载一篇关于global_name设置的文章,自己偷个懒不做实验了。
 
1. 数据库域名
1)全局数据库名(GLOBAL DATABASE NAME)
全局数据库名是在分布式数据库系统中用于标识数据库的唯一名称,默认为DB_NAME.DB_DOMAIN。该默认值在数据库创建的时候被标记,如果数据库创建后手工修改了DB_NAME或者DB_DOMAIN,全局数据库名称仍然保持为数据库创建时候的DB_NAME.DB_DOMAIN。
SQL> show parameter db_name 

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_name                              string          test
 
SQL> show parameter db_domain

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_domain                            string
 

SQL> select *from global_name;
 

GLOBAL_NAME
--------------------------------------------------------------------------------
 

TEST.US.ORACLE.COM
 

SQL> alter system set db_domain='test.com' scope=spfile;
 

系统已更改。 

SQL> shutdown abort
ORACLE 例程已经关闭。
SQL>
SQL> startup
ORACLE 例程已经启动。
 
Total System Global Area  114061244 bytes
Fixed Size                   282556 bytes
Variable Size              79691776 bytes
Database Buffers           33554432 bytes
Redo Buffers                 532480 bytes
数据库装载完毕。
数据库已经打开。
SQL>
SQL> show parameter db_domain

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_domain                            string      test.com
SQL> select *from global_name;
 

GLOBAL_NAME
-------------------------------------------------------------------------------

TEST.US.ORACLE.COM

SQL>
 

2) 修改域名
可以通过修改全局数据库名来修改域名。
如果alter database rename global_name to 中的name没有指定域名,则默认为先前global_name中包含的域名.
SQL> select *from global_name; 

GLOBAL_NAME
--------------------------------------------------------------------------------
 
TEST.US.ORACLE.COM
SQL> alter database rename global_name to test1;

数据库已更改。 

SQL> select *from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------

TEST1.US.ORACLE.COM
 
SQL>

US.ORACLE.COM即为域名.不妨通过建立数据库链接来测试一下:
QL> column db_link format a20
SQL> column username format a20
SQL> column host format a10
SQL> column owner format a20
> select owner,db_link,username,host from dba_db_links;
 
未选定行 

>
> create database link test connect to test identified by test using
'test'; 

数据库链接已创建。
-- 默认为US.ORACLE.COM
> select owner,db_link,username,host from dba_db_links;
 

OWNER                DB_LINK              USERNAME             HOST
-------------------- -------------------- -------------------- ----------
TEST                 TEST.US.ORACLE.COM   TEST                 test
 

> alter database rename global_name to oracle.test.com;
 
数据库已更改。

> create database link test connect to test identified by test using
'test';

数据库链接已创建。
-- 通过改变全局数据库名改变域名为TEST.COM
> select owner,db_link,username,host from dba_db_links;
 

OWNER                DB_LINK              USERNAME             HOST
-------------------- -------------------- -------------------- ----------
TEST                 TEST.TEST.COM        TEST                 test
TEST                 TEST.US.ORACLE.COM   TEST                 test
 

>
> show parameter db_domain
 

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_domain                            string      test.com
SQL> alter database rename global_name to oracle.com.cn;
 

数据库已更改。
 

SQL> create database link test connect to test identified by test using
'test';
 

数据库链接已创建。
-- 通过改变全局数据库名改变域名为COM.CN
> select owner,db_link,username,host from dba_db_links;
 

OWNER                DB_LINK              USERNAME             HOST
-------------------- -------------------- -------------------- ----------
TEST                 TEST.COM.CN           TEST                 test
TEST                 TEST.TEST.COM         TEST                 test
TEST                 TEST.US.ORACLE.COM   TEST                 test

--以上案例有几个地方有笔误,不知道大家看出来没有。              
 
2.sqlnet.ora中的域名
在sqlnet.ora配置文件中指定了域名,比如NAMES.DEFAULT_DOMAIN = com.cn
1) 如果在tns配置中没有加域名com.cn
如:
test =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = )
    )
  )
则tnsping test会失败:
 

D:>tnsping test
 

TNS Ping Utility for 32-bit Windows: Version 9.0.1.1.1 - Production on 22-11月-2
004 15:03:14
 

Copyright (c) 1997 Oracle Corporation.  All rights reserved.
 

已使用的参数文件:
D:oracleora90networkadminsqlnet.ora
D:oracleora90networkadmintnsnames.ora
 

TNS-03505: 未能分解名称
 

但在netmgr中可以测试成功:
正在尝试使用以下用户名连接:test
连接测试成功。
 

这可能是oracle net的一个bug.
 

2) 如果在tns中有与DEFAULT_DOMAIN不一致的域名,用tnsping可以ping通并且可以连接上数据库:
tns配置
test.test.com =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = )
    )
  )
 

D:>tnsping test.test.com
 

TNS Ping Utility for 32-bit Windows: Version 9.0.1.1.1 - Production on 23-11月-2
004 11:17:43
 

Copyright (c) 1997 Oracle Corporation.  All rights reserved.
 

已使用的参数文件:
D:oracleora90networkadminsqlnet.ora
D:oracleora90networkadmintnsnames.ora
 

已使用 TNSNAMES 适配器来解析别名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = )(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = )))
OK(430毫秒)
 

D:>sqlplus
 

SQL*Plus: Release 9.0.1.0.1 - Production on 星期二 11月 23 11:17:52 2004
 

(c) Copyright 2001 Oracle Corporation.  All rights reserved.
 

 

连接到:
Oracle9i Enterprise Edition Release 9.0.1.0.0 - 64bit Production
With the Partitioning option
JServer Release 9.0.1.0.0 - Production
 

SQL>
 

3) 如果在tns中有与DEFAULT_DOMAIN一致的域名,则连接可以省略域名。
Tns配置如下:
test.com.cn =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = )
    )
  )
 

D:>tnsping test
 

TNS Ping Utility for 32-bit Windows: Version 9.0.1.1.1 - Production on 23-11月-2
004 11:17:43

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

已使用的参数文件:
D:oracleora90networkadminsqlnet.ora
D:oracleora90networkadmintnsnames.ora

已使用 TNSNAMES 适配器来解析别名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = )(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = )))
OK(430毫秒)

D:>sqlplus
 
SQL*Plus: Release 9.0.1.0.1 - Production on 星期二 11月 23 11:17:52 2004

(c) Copyright 2001 Oracle Corporation.  All rights reserved.
 

连接到:
Oracle9i Enterprise Edition Release 9.0.1.0.0 - 64bit Production
With the Partitioning option
JServer Release 9.0.1.0.0 - Production

SQL>
 

3. 结论
数据库域名与数据库全局名称相关,可以通过修改数据库全局名达到修改数据库域名的目的;
如果在sqlnet.ora中设置了默认域名则需要在tns中设置与DEFAULT_DOMAIN一致或不一致的域名。为避免不必要的麻烦,最好DEFAULT_DOMAIN要么在sqlnet.ora和tnsnames.or中同时出现,要么同时不出现。
 
 
阅读(2789) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~