zoukankan      html  css  js  c++  java
  • oracle Service Name和SID的区别

    数据库名(DB_NAME)、实例名(Instance_name)、以及操作系统环境变量(ORACLE_SID) 
    在ORACLE7、8数据库中只有数据库名(db_name)和数据库实例名(instance_name)。在ORACLE8i、9i中出现了新的参数,即数据库域名(db_domain)、服务名(service_name)、以及操作系统环境变量(ORACLE_SID)。这些都存在于同一个数据库中的标识,用于区分不同数据库的参数。 
    一、什么是数据库名(db_name)? 
    数据库名是用于区分数据的内部标识,是以二进制方式存储于数据库控制文件中的参数,在数据安装或创建之后将不得修改。数据库安装完成后,该参数被写入数据库参数文件pfile中,格式如下: 
    ......... 
    db_name="orcl" #(不允许修改) 
    db_domain=dbcenter.toys.com 
    instance_name=orcl 
    service_names=orcl.dbcenter.toys.com 
    control_file=(............... 
    .........
     
     
    在每一个运行的ORACLE8i数据库中都有一个数据库名(db_name),如果一个服务器程序中创建了两个数据库,则有两个数据库名。其控制参数据分属在不同的pfile中控制着相关的数据库。
     
     
    二、什么是数据库实例名(instance_name)
     
     
    数据库实例名则用于和操作系统之间的联系,用于对外部连接时使用。在操作系统中要取得与数据库之间的交互,必须使用数据库实例名。例如,要和某一个数据库server连接,就必须知道其数据库实例名,只知道数据库名是没有用的,与数据库名不同,在数据安装或创建数据库之后,实例名可以被修改。数据库安装完成后,该实例名被写入数据库参数文件pfile中,格式如下:
     
    db_name="orcl" #(不允许修改) 
    db_domain=dbcenter.toys.com 
    instance_name=orcl #(可以修改,可以与db_name相同也可不同) 
    service_names=orcl.dbcenter.toys.com 
    control_file=(........................
     
     
    数据库名与实例名之间的关系
     
     
    数据库名与实例名之间的关系一般是一一对应关系,有一个数据库名就有一个实例名,如果在一个服务器中创建两个数据库,则有两个数据库名,两个数据库实例名,用这两个标识(数据库名和实例名)确定一个数据库,用户和实例相连接。 
    但在8i、9i的并行服务器结构中,数据库与实例之间不存在一一对应关系,而是一对多关系,(一个数据库对应多个实例,同一时间内用户只一个实例相联系,当某一实例出现故障,其它实例自动服务,以保证数据库安全运行。)
     
     
    三、操作系统环境变量(ORACLE_SID)
     
     
    在实际中,对于数据库实例名的描述有时使用实例名(instance_name)参数,有时使用ORACLE_SID参数。这两个都是数据库实例名,它们有什么区别呢?(经常弄混) 
     
    (ORACLE_SID) 
    OS<----------------> ORACLE 数据库 <--------(Instance_name(实例名)) 
     
    上图表示实例名instance_name、ORACLE_SID与数据库及操作系统之间的关系,虽然这里列出的两个参数都是数据库实例名,但instance_name参数是ORACLE数据库的参数,此参数可以在参数文件中查询到,而ORACLE_SID参数则是操作系统环境变量。 
    操作系统环境变量ORACLE_SID用于和操作系统交互。也就是说,在操作系统中要想得到实例名,就必须使用ORACLE_SID。此参数与ORACLE_BASE、ORACLE_HOME等用法相同。在数据库安装之后,ORACLE_SID被用于定义数据库参数文件的名称。如: 
    $ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID.ora。
     
    定义方法: 
     
    export ORACLE_SID=orcl 
     
    如果在同一服务器中创建了多个数据库,则必然同时存在多个数据库实例,这时可以重复上述定义过程,以选择不同实例。 
    还可以用
     
     
    [oracle@Datacent]$ . oraenv
     
    来切换不同的ORACLE_SID来通过操作系统来启动不同的实例(instance)
     
    ===================================================================================
     
    数据库名:db_name           
    数据库实例名:instance_name 
    操作系统环境变量:oracle_sid 
    数据库服务名:service_names 
    数据库域名:db_domain        
    全局数据库名:global_db_name 
     
    在oracle7、oracle8数据库中只有数据库名以及实例名,在oracle8i、oracle9i中出现了数据库域名、服务名以及全局数据库名。 
     
    数据库名(db_name):用于区分一个数据的内部标识,是oracle的内部标记,是以二进制方式存储于数据库控制文件的参数。 
    数据库名的作用:数据库名是数据库的内部管理标记,在安装数据库、创建新的的数据库、创建数据库控制文件、修改数据库结构、使用数据库备份与恢复工具进行数据库备份时都需要使用数据名。 
    数据库安装完成后,数据库名称存储在参数文件(pfile,spfile)中,同时以二进制方式存储在控制文件中,两者必须匹配。如果两者不匹配,数据库在启动时提示ORA-01103号错误。 
    ■ 对数据名称的查询: 
    1、查询参数文件 db_name的数值 
    2、select name from v$database 
    3、SQL>show parameter db_name 
    ■ 修改数据库名(修改复杂,建议不要修改) 
    1、修改参数文件的数据库名称。 
    2.重建数据库的控制文件。 
     
    数据库实例名(instance_name):用于和操作系统之间的联系。 
    操作系统与数据库之间的交互则必须使用数据库实例名。数据库安装完成后,数据库实例名称存储在参数文件中,同时存储在注册表中。 
    数据库名与实例名一般是一一对应的关系,即:有一个数据库名就有一个实例名,而在oracle9i的并行服务器结构中是一对多的关系,即:一个数据库对应多个实例。 
    ■ 对数据名称的查询: 
    1、查询参数文件 instance_name的数值 
    2、select instance_name from v$instance 
    3、SQL>show parameter instance_name 
     
    操作系统环境变量(oracle_sid):用于与数据库实例名相对应。instance_name是oracle数据库参数 -oracle_sid是操做系统环境变量,即在操作系统要得到实例名必须通过操做系统环境变量oracle_sid,oracle_sid与 instance_name必须相同。 
    是数据库和操作系统的接口,由操作系统使用,是操作系统区分多个数据库的依据。oracle_sid存储在注册表中。如果数据库的oracle_sid与实际的instance_name不同,在操作系统下运行的oracle所有命令将产生错误。 
    ■ 对数据实例名的定义: 
    SQL>set oracle_sid=数据库实例名 
     
    数据库域名(db_domain):在数据库名称后增加域名构成,使得数据库的取名在整个网络环境中惟一,主要用于oralce分布式环境中数据的远程复制。数据库域名存储在参数文件中。 
    以下情况要考虑使用数据库域名:1、在oracle分布式环境下,两个数据库之间要通过数据链路进行数据的远程传输。2、在同一网络环境下,两个数据库名相同。 
    ■ 对数据库域名的查询: 
    1、查询参数文件 db_domain的数值 
    2、select value from v$parameter where name='db_domain' 
    3、SQL>show parameter db_domain 
    ■ 修改数据库域名: 
    1、关闭数据库 
    2、修改数据库参数文件中的db_domain、service_names。 
     
    数据库服务名service_names:数据库名+数据库域名,意义与全局数据库名相同。 
    数据库服务名存储在参数文件中。 
    ■ 对数据库服务名的查询: 
    1、查询参数文件 service_names的数值 
    2、select value from v$parameter where name='service_names' 
    3、SQL>show parameter service_names 
     
    全局数据库名global_db_name:数据库名+数据库域名。 
     
     
    数据库实例名、服务名与网络连接 
    ORACLE服务器版本 客户端网络驱动 
    ORACLE7   (支持实例名) SQL_NET(支持实例名) 
    ORACLE8   (支持实例名) NET8 (支持实例名) 
    ORACLE8i 
    (支持实例名、服务名) NET8i (支持实例名、服务名) 
    ORACLE9i 
    (支持实例名、服务名) ORACLE NET SERVICE 
    (支持实例名、服务名) 
    对于网络连接字符串使用实例名、服务名的问题,需要根据客户端驱动的版本和oracle服务器的版本共同确定,即两者都支持实例名和服务名的使用服务名,否则使用实例名。
     
    ====================================================================================
     
    1. SID是实例名,实例名指的是用于响应某个数据库操作的数据库管理系统的名称。实例名是由初始化参数文件的参数instance_name决定的。如果这个参数不被指定(即instance_name没有被指定为任何值),那么实例的名字由该用户的环境变量ORACLE_SID(注意这里是大写)决定。在windows平台下,则是注册表中oracle_sid值决定。
     
     
    2. SERVICE_NAME指的是listener中的全局数据库名:这个名字是由listener.ora中GLOBAL_DBNAME参数决定的。这个名字代表的是客户端连接到数据库时,tnsnames.ora中SERVICE_NAME参数所对应的值。
     
    3. 连接字符串
     
        配置tnsname.ora时,可以用SID,也可以用SERVICE_NAME.  注意这两个值不一定相同,具体要看数据库服务器中的配置。
     
    connect_str =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = xx.xx.xx.xx)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = xxxx
        )
      )
     
    connect_str =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = xx.xx.xx.xx)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SID = xxx)
          (SERVER = DEDICATED)
        )
      )
  • 相关阅读:
    Maximum Flow Exhaustion of Paths Algorithm
    ubuntu下安装java环境
    visualbox使用(二)
    vxworks一个超级奇怪的错误(parse error before `char')
    February 4th, 2018 Week 6th Sunday
    February 3rd, 2018 Week 5th Saturday
    February 2nd, 2018 Week 5th Friday
    February 1st, 2018 Week 5th Thursday
    January 31st, 2018 Week 05th Wednesday
    January 30th, 2018 Week 05th Tuesday
  • 原文地址:https://www.cnblogs.com/jichunhu/p/4063175.html
Copyright © 2011-2022 走看看