1、db_name 数据库名

  SQL> connect xys/manager as sysdba

  已连接。

  SQL> show user

  USER 为 "SYS"

  SQL> show parameter db_name

  NAME TYPE VALUE

  ---- -------- ------------

  db_name string test1

  db_name是数据库的名字,oracle本身可能是比较有用的,对我们而言没有什么太多的用处,db_name记录在controlfile,datafile_header,redo中,要想修改db_name是比较麻烦的有两种办法:1、重建controlfile,之后要求必须以reseglogs方式打开数据库;2、通过nid。另外在建库时db_name被限制为最长8个字符,尽管10g在创建时没有错误提示了,但是看看库里最多能存下几个字符就明白了,为什么即使输入超过8个字符不会报错,但是最终还是被截断了,之前我就为一个企业处理过截断db_name而引起的一些问题。

  SQL> desc v$database;

  名称 是否为空? 类型

  ----------- -------- ---------

  DBID NUMBER

  NAME VARCHAR2(9)

  SQL>

  因此在建库时指定恰当的db_name还是非常重要的。db_name还有一个非常重要的作用就是动态注册监听,不管是否指定了service_name,或者说service_name的值是什么,pmon都会使用db_name动态注册监听的。

  SQL> host lsnrctl status 
  LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 03-12月-2007 10:1 
  9:36 
  Copyright (c) 1991, 2005, Oracle. All rights reserved.

正在连接到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

  LISTENER 的 STATUS

  ------------------------

  别名 LISTENER

  版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ

  ction

  启动日期 03-12月-2007 09:29:47

  正常运行时间 0 天 0 小时 49 分 50 秒

  跟踪级别 off

  安全性 ON: Local OS Authentication

  SNMP OFF

  监听程序日志文件 e:\oracle\product\10.2.0\db_1\network\log\listener.log

  监听端点概要...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1521)))

  服务摘要..

  服务 "TEST2.COM" 包含 1 个例程。

  例程 "inst_test", 状态 READY, 包含此服务的 1 个处理程序...

  服务 "TEST3.COM" 包含 1 个例程。

  例程 "inst_test", 状态 READY, 包含此服务的 1 个处理程序...

  服务 "test1.COM" 包含 1 个例程。

  例程 "inst_test", 状态 READY, 包含此服务的 1 个处理程序...

  服务 "test1_XPT.COM" 包含 1 个例程。

  例程 "inst_test", 状态 READY, 包含此服务的 1 个处理程序...

命令执行成功

  SQL> show parameter service_names

  NAME TYPE VALUE

  ------------------------------------ ----------- ------------------------------

  service_names string TEST2, TEST3

  我们发现service_names的值是TEST2, TEST3,但是lsnrctl status显示的结果中包含了“

  服务 "test1.COM" 包含 1 个例程。

  例程 "inst_test", 状态 READY, 包含此服务的 1 个处理程序...”

  2、instnace_name 实例名

  SQL> show parameter instance_name

  NAME TYPE VALUE

  ------------------------------------ ----------- ------------------------------

  instance_name string inst_test

  instance_name除了动态注册监听用到之外,到目前为止我没有发现其他用处,也许oracle用它来区分各个实例?不过相信仅仅通过instance_name也不能完全区分,至少也的用到sid吧,看看上面显示出来的动态注册监听中的信息,其中inst_test就是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打交道的。

  sid可以通过如下语句在库中查询:

  SQL> select instance_name from v$instance;

  INSTANCE_NAME

  ----------------

  tsid

尽管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

  NAME TYPE VALUE

  ------------------------------------ ----------- ------------------------------

  service_names string TEST2, TEST3

  这里我指定了2个值test2,test3,再来看看动态注册的监听是如何使用服务名的,监听的部分状态信息如下:

  服务 "TEST2.COM" 包含 1 个例程。

  例程 "inst_test", 状态 READY, 包含此服务的 1 个处理程序...

  服务 "TEST3.COM" 包含 1 个例程。

  例程 "inst_test", 状态 READY, 包含此服务的 1 个处理程序...

  这里我们看到显示出来的服务名有后缀com,是因为我设置了db_domain

  5、db_domain 数据库域名

  SQL> show parameter db_domain

  NAME TYPE VALUE

  ------------------------------------ ----------- ------------------------------

  db_domain string COM

  doc上说它被"."分割,包括句点最多128个字符,没改过这么长的,不知道,没有验证过,谁想验证就验证一下,db_domain 的作用主要是用在分布式数据库中,分布式事务的各个数据库应该有db_domain ,但是要求他们是否相同,doc上没说,我也不知道,之前单位开发有分布式环境,但是当时没有注意过,不过高级复制中要同步的对象所在的数据库是无论如何也要设置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 (#).

  ),9i好像记得是这样的,但是10g我验证了一下不是:

  SQL> create database link dbl_test using 'orcl';

  数据库链接已创建。

  SQL> select db_link from dba_db_links;

  DB_LINK

  ----------------------------------------------------------------------------

  DBL

  DBL_TEST

  ORCL

  还有一点需要主要的是: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 
  -------------------------------------------- 
  test1

  按照doc的意思,我上面看到的查询结果应该是test1.com才对,这是我的疑问,好久了?

  不过我们也可以修改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>

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

  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 
  SQL>

  不过可以直接update global_name 或者props$来去掉后缀:

  SQL> update global_name set global_name='test1';

  已更新 1 行。

  SQL> commit;

  提交完成。

以下是引用片段:
  SQL> select * from global_name; 
  GLOBAL_NAME 
  --------------------------------------------------------------- 
  test1 
  SQL>

  global_name 的作用主要也是用在Distributed Database中,我只在高级复制中用过global_name

  详细的内容也可以参考下面的连接:

  [url=http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/ds_admin.htm#sthref4096]http://download.oracle.com/docs/ ... dmin.htm#sthref4096[/url]

  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_link format a10 
  SQL> col host format a10 
  SQL> col owner format a10 
  SQL> col username format a10 
  SQL> select * from dba_db_links; 
  OWNER DB_LINK USERNAME HOST CREATED 
  ---------- ---------- ---------- ---------- -------------- 
  SYS DBL TEST orcl 01-12月-07 
  SYS ORCL TEST orcl 01-12月-07 
  SQL> select count(*) from t_emp@orcl; 
  COUNT(*) 
  ---------- 
  4 
  SQL>

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

  listener.ora内容如下:

  SID_LIST_LISTENER = 
  (SID_LIST = 
  (SID_DESC = 
  (GLOBAL_DBNAME = test) 
  (ORACLE_HOME = E:\oracle\product\10.2.0\db_1) 
  (SID_NAME = tsid) 
  ) 
  ) 
  LISTENER = 
  (DESCRIPTION = 
  (ADDRESS = (PROTOCOL = TCP)(HOST = xys)(PORT = 1521)) 
  )

 tnsnames.ora内容如下:

  TEST = 
  (DESCRIPTION = 
  (ADDRESS_LIST = 
  (ADDRESS = (PROTOCOL = TCP)(HOST = xys)(PORT = 1521)) 
  ) 
  (CONNECT_DATA = 
  (SERVICE_NAME = test) 
  ) 
  )

  这里明确的告诉大家,配置静态监听注册时,需要输入的全局数据库名(GLOBAL_DBNAME )输入什么都可以,只要保证listerner.ora中的GLOBAL_DBNAME和tnsnames.ora中的SERVICE_NAME保持一致就可以,下面通过试验看看效果:

  值得主要的是GLOBAL_DBNAME = test,而此时数据库的db_name和global_name以及service_names分别如下显示:

  SQL> show parameter db_name

  NAME TYPE VALUE

  ------------------------------------ ----------- ------------------------------

  db_name string test1

  SQL> select *from global_name;

  GLOBAL_NAME

  --------------------------------------------------------------------------------

  test1

  SQL> alter database rename global_name to abcd.yu;

  数据库已更改。

 SQL> select *from global_name;

  GLOBAL_NAME

  --------------------------------------------------------------------------------

  ABCD.YU

  SQL>

  SQL> show parameter service_names

  NAME TYPE VALUE

  ------------------------------------ ----------- ------------------------------

  service_names string TEST2, TEST3

  SQL>

  而我在配置listener和tnsnames时提供的test和db_name,globla_name,service_name没有任何关系,然后看看tnsping的效果:

  C:\>tnsping test

  已使用 TNSNAMES 适配器来解析别名

  Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)

  (HOST = xys)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = test)))

  OK (30 毫秒)

  C:\>

  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已经被废弃!

oracle name的更多相关文章

  1. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  2. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  3. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  4. Oracle 的基本操作符

    != 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...

  5. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  6. 基于Oracle安装Zabbix

    软件版本 Oracle Enterprise Linux 7.1 64bit Oracle Enterprise Edition 12.1.0.2 64bit Zabbix 3.2.1 准备工作 上传 ...

  7. Oracle Database 12c Data Redaction介绍

    什么是Data Redaction Data Redaction是Oracle Database 12c的高级安全选项之中的一个新功能,Oracle中国在介绍这个功能的时候,翻译为“数据编纂”,在EM ...

  8. 使用Oracle官方巡检工具ORAchk巡检数据库

    ORAchk概述 ORAchk是Oracle官方出品的Oracle产品健康检查工具,可以从MOS(My Oracle Support)网站上下载,免费使用.这个工具可以检查Oracle数据库,Gold ...

  9. 利用Oracle RUEI+EM12c进行应用的“端到端”性能诊断

    概述 我们知道,影响一个B/S应用性能的因素,粗略地说,有以下几个大的环节: 1. 客户端环节 2. 网络环节(可能包括WAN和LAN) 3. 应用及中间层环节 4. 数据库层环节 能够对各个环节的问 ...

  10. 使用技术手段限制DBA的危险操作—Oracle Database Vault

    概述 众所周知,在业务高峰期,某些针对Oracle数据库的操作具有很高的风险,比如修改表结构.修改实例参数等等,如果没有充分评估和了解这些操作所带来的影响,这些操作很可能会导致故障,轻则导致应用错误, ...

随机推荐

  1. 动态sql & 抽取可重用sql

    抽取可重用的sql片段 抽取:<sql id="xx"></sql> 使用:<include refid="xx">< ...

  2. logstash写入kakfa数据丢失的问题

    metricbeat采集系统指标,发送到logstash,再写入kafka,发现kafka中的数据不完整,只有某一个指标, 查找原因发现是logstash配置编码问题,如下: input { beat ...

  3. 什么?还在用delete删除数据《死磕MySQL系列 九》

    系列文章 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 六.五分钟,让你明白MySQL是怎么选择索引<死磕MySQL系列 六> 七.字符串可以这样加索引,你知吗?& ...

  4. Flask搭建弹幕视频网站(1)

    说在前面 也不知道最后能不能完成网站,所以就想把这十多天来学习到的点点滴滴记录下来.学的越来越多,所谓全栈也是需要前端基础,越来越感受到压力,但是遇到一个问题就解决一个问题,慢慢习惯之后感觉也还行.说 ...

  5. 程序员PS技能(四):程序员创建PSD文件、展示简单PSD设计流程,上传PSD至蓝湖,并下载Demo切图

    前言   本篇是程序员仿照ui设计创建psd且切图五个按钮效果上传至蓝湖,本篇篇幅较长,整体完成一个目标,没有分篇幅了.   前提条件   已经安装了PS,已经在PS上安装了蓝湖插件,并且曾经已经上传 ...

  6. hexo+腾讯云

    hexo+腾讯云主机搭建博客 参考链接1 参考链接2 参考链接3 说明:不建议用hexo在云主机上搭建博客,感觉多此一举,建议hexo+github, wordpress+云主机(宝塔界面更快哦) 一 ...

  7. [Aizu1410]Draw in Straight Lines

    注意到当操作确定后,显然操作顺序总是涂黑色的1操作->涂白色的1操作->2操作 用$b/w_{r/c}(i,j)$表示$(i,j)$是否被黑色/白色 横着/竖着 涂过(1表示涂过,0表示没 ...

  8. [cf1515I]Phoenix and Diamonds

    将$n$类物品按照价值为第一关键字(从大到小).质量为第二关键字(从小到大)排序,此时贪心策略即依次贪心选(排序后)第$i$类的物品(其中$i$从1到$n$) 为了方便,排序后第$i$类物品质量.价值 ...

  9. Codeforces 643G - Choosing Ads(线段树)

    Codeforces 题目传送门 & 洛谷题目传送门 首先考虑 \(p>50\) 的时候怎么处理,也就是求一个区间的绝对众数.我们知道众数这个东西是不能用线段树直接维护的,因为对于区间 ...

  10. 自助分析工具Power BI的简介和应用

    作为一名资深的IT技术人,特别喜欢学习和尝试新技术,也勇于接受挑战,勇于创新,不仅能发现问题,更要解决实际的疑难杂症,闲暇时光也乐于分享一些技术干货.记得2017年的时候,华章出版社的编辑通过网上找到 ...