1、db_name是数据库的名,一个数据库的标识,每台服务器上的每个数据库都有一个数据库名。
侧重于oracle内部管理机制。db_name记录在controlfile,datafile_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
3、SID:System 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,在win下sid不能重复,不管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中建议大家在primary,standby上使用相同的service_names,这样可能便于尽可能的实现透明切换,前提是如果没有配置静态静听的话,当然如果配置了静态注册的监听在primary,standby上也务必保持在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_domain(doc: 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_domain和global_name 同步起来, global_name oracle是通过提供了一个view,sys.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中
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
8、在通过netmanager配置静态监听注册时,需要输入的全局数据库名(GLOBAL_DBNAME )到底应该输入什么?而通过netmanager配置网络服务命名(tns)是需要输入的服务名(SERVICE_NAME )又是什么?
配置静态监听注册时,需要输入的全局数据库名(GLOBAL_DBNAME )输入什么都可以,只要保证listerner.ora中的GLOBAL_DBNAME和tnsnames.ora中的SERVICE_NAME保持一致就可以
而在配置listener和tnsnames时提供的test和db_name,globla_name,service_name没有任何关系。
9、db_unique_name
DB_UNIQUE_NAME是10g的参数,在配置dataguard环境时必须为处于dg环境中每个db设置一个唯一值,在没有DB_UNIQUE_NAME参数之前,在同一台机器上搭建dg时必须使用参数LOCK_NAME_SPACE在standby参数文件中,10g有了参数db_unique_name,LOCK_NAME_SPACE已经被废弃!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10804699/viewspace-606249/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10804699/viewspace-606249/