oracle中的名字(names for oracle)

1db_name是数据库的名,一个数据库的标识,每台服务器上的每个数据库都有一个数据库名。

侧重于oracle内部管理机制。db_name记录在controlfiledatafile_header,redo中。修改db_name是比较麻烦的有两种办法:1、重建controlfile,之后要求必须以reseglogs方式打开数据库;2、通过nid

在建库时db_name被限制为最长8个字符,尽管10g在创建时没有错误提示了,但是看看库里最多能存下几个字符就明白了,为什么即使输入超过8个字符不会报错,但是最终还是被截断了。因此在建库时指定恰当的db_name还是非常重要的。

db_name还有一个非常重要的作用就是动态注册监听,不管是否指定了service_name,或者说service_name的值是什么,pmon都会使用db_name动态注册监听的。
SQL> show parameter db_name

SQL> select name from v$database;

SQL> desc v$database;
名称                                      是否为空? 类型
----------------------------------------- -------- ------------------------
DBID                                               NUMBER
NAME                                               VARCHAR2(9)
2
instnace_name 实例名。实例是访问Oracle数据库所需的一部分计算机内存和辅助处理后台进程,是由进程和这些进程所使用的内存(SGA)所构成一个集合,没有任何数据文件也可以启动实例。

实例名指的是用于响应某个数据库操作的数据库管理系统的名称。她同时也叫SID。实例名是由参数instance_name决定的。如果这个参数不被指定 (instance_name没有被指定为任何值),那么实例的名字由该用户的环境变量ORACLE_SID(注意这里是大写)决定。在windows 平台下,则是注册表中oracle_sid值决定。在RAC中,每个节点中的db_name是一个,但instance_name不同。

SQL> show parameter instance_name

3SIDSystem Identifier
The SID identifies the instance's shared memory on a host, but may not uniquely distinguish this instance from other instances
doc
上把sid解释为在host上用sid来标示实例的共享内存的,可见sid主要是和os打交道的。尽管v$instance中字段 instance_name 看起来是实例名,但是实际上存储的是sid,在winsid不能重复,不管oracle_home是否相同,相同当然不行,主要是不同也不行,这里的不同是针对unix/linux而言的,在unix/linux下只要不同版本的oracle安装在不同的oracle_home下就可以创建相同sid的实例,但是win下不可以,这不是由oracle决定的,主要是受到windows服务的限制,在服务中不能存在服务名相同的oracle服务,服务名是由如下格式组成的:OracleServiceSID,因为服务名中包括了sid,所以sid如果相同了,服务名就相同了,这是windows所不允许的。因此在win下无法创建相同sid的不同实例。

4
service_names 服务名
service_names
可以是多个值,这里的服务名除了在动态注册的监听中被用到之外,没有发现其它用处,还有其它用处大家可以补充,dataguard中建议大家在primarystandby上使用相同的service_names,这样可能便于尽可能的实现透明切换,前提是如果没有配置静态静听的话,当然如果配置了静态注册的监听在primarystandby上也务必保持在listener中要求输入的服务名相同,还是那句话,尽可能的实现透明切换。下面查询可以显示service_names
SQL> show parameter service_names
5
db_domain 数据库域名
SQL> show parameter db_domain
db_domain
的作用主要是用在分布式数据库中,分布式事务的各个数据库应该有db_domain ,高级复制中要同步的对象所在的数据库是无论如何也要设置db_domain 的, db_domain 的另一个用途就是在同一个os域中如果要创建同名db_name的数据库时建议最好让具有相同db_name的数据库具有不同的db_domain,以保证在同一个域中global_name是唯一的。doc上也是这样建议的:Oracle recommends that you specify DB_DOMAIN as a unique string for all databases in a domain当指定了db_domain的时候,在创建db link时会自动在db_link的后面加上db_domaindoc If you omit the domains from the name of a database link, Oracle expands the name by qualifying the database with the domain of your local database as it currently exists in the data dictionary, and then stores the link name in the data dictionary. The characters valid in a database domain name are: alphanumeric characters, underscore (_), and number sign (#).

还有一点需要主要的是:You must set this parameter for every instance, and multiple instances must have the same value in Real Application Clusters

6
global_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:

Component Parameter Requirements Example
Database name DB_NAME Must be eight characters or less. sales
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_domainglobal_name 同步起来, global_name oracle是通过提供了一个viewsys.global_name,该试图是源于props$的,可以查看创建view的脚本,最终我们访问的是一个public synonym global_name:
SQL> select * from global_name;
不过我们也可以修改global_name
SQL> alter database rename global_name to test1.com;

需要注意的是一旦加上了域就不能通过上面的命令去掉了,

global_name 的作用主要也是用在Distributed Database

7global_names 是一个布尔值,为什么要提它,是应为global_namesglobal_name看起来很相似,global_names的作用是创建db link时是否强制使用远程数据库的global_name,如果global_names=true,db link name必须要求是remote databaseglobal_name,否则创建之后db link 不能连同,缺省值是false
SQL> show parameter global_names

8
、在通过netmanager配置静态监听注册时,需要输入的全局数据库名(GLOBAL_DBNAME )到底应该输入什么?而通过netmanager配置网络服务命名(tns)是需要输入的服务名(SERVICE_NAME )又是什么?

配置静态监听注册时,需要输入的全局数据库名(GLOBAL_DBNAME )输入什么都可以,只要保证listerner.ora中的GLOBAL_DBNAMEtnsnames.ora中的SERVICE_NAME保持一致就可以

而在配置listenertnsnames时提供的testdb_name,globla_name,service_name没有任何关系。

9db_unique_name
DB_UNIQUE_NAME
10g的参数,在配置dataguard环境时必须为处于dg环境中每个db设置一个唯一值,在没有DB_UNIQUE_NAME参数之前,在同一台机器上搭建dg时必须使用参数LOCK_NAME_SPACEstandby参数文件中,10g有了参数db_unique_nameLOCK_NAME_SPACE已经被废弃!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10804699/viewspace-606249/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10804699/viewspace-606249/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值