天天看點

關于資料庫中的一些name

如果接觸資料庫有些時間了,可能會碰到很多關于資料庫相關的名字,比如ORACLE_SID,db_name,instance_name,db_unique_name等等。可能一下子都有些糊塗了,就一股腦兒認為都應該是一緻的,其實不然。如果你接觸的環境比較單一,可能會有這種錯覺。

我們來簡單對比一下單執行個體和多執行個體下的資料庫中的這些名詞。

首先來看看單執行個體的。

[ora11g@rac1 ~]$ echo $ORACLE_SID 

TEST01

[ora11g@rac1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Mon Nov 24 03:40:26 2014

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show parameter name  --檢視資料庫中涉及到name的參數

NAME                                 TYPE        VALUE

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

db_file_name_convert                 string

db_name                              string      TEST01

db_unique_name                       string      TEST01

global_names                         boolean     FALSE

instance_name                        string      TEST01

lock_name_space                      string

log_file_name_convert                string

processor_group_name                 string

service_names                        string      TEST01

這麼看好像都是一緻的,沒有任何差別。

再來看看多執行個體的環境。

-bash-4.1$ echo $ORACLE_SID

RACDB1

-bash-4.1$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Mon Nov 24 03:42:52 2014

With the Partitioning, Real Application Clusters, Oracle Label Security, OLAP,

Data Mining and Real Application Testing options

SQL> show parameter name   --檢視資料庫中涉及到name的參數

db_name                              string      RACDB

db_unique_name                       string      RACDB

instance_name                        string      RACDB1

service_names                        string      RACDB

SQL>

從這個例子就能很明顯的看出來instance_name和db_name的不同。db_name代表資料庫名,這個是唯一的。長度最長為8位,根據oracle的體系結構,一個資料庫可以對應多個執行個體,那麼對應的多個執行個體名稱就不可能都相同,在rac環境中,instance_name就可以對應多個不同的執行個體名,單執行個體環境中instance_name和db_name事一緻的。

對于ORACLE_SID,這個是基于作業系統級的變量,而且是大小寫敏感的。它的名字和instance_name是對應的。

既然db_name是資料庫名,那麼要修改就是很困難而且有一定得風險的。不能直接通過參數檔案直接去修改的。需要重建控制檔案。

SQL> show parameter db_name

SQL> alter system set db_name=test01 scope=spfile;

alter system set db_name=test01 scope=spfile

*

ERROR at line 1:

ORA-32017: failure in updating SPFILE

ORA-32016: parameter "db_name" cannot be updated in SPFILE

繼續來看看service_name相關的一些東西。

檢視監聽的情況,可以看到rac有連個監聽,其中一個是通過IP漂移來動态控制的。LISTENER_SCAN1,但是不管監聽的名稱如何,對應的service_name都和db_name是一緻的。

-bash-4.1$ ps -ef|grep tns

root        13     2  0 Nov19 ?        00:00:00 [netns]

ora11g    2333     1  0 Nov19 ?        00:00:03 /u03/ora11g/product/11.2.0/dbhome_1/bin/tnslsnr list -inherit

grid     22803     1  0 03:34 ?        00:00:00 /u04/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit

grid     22807     1  0 03:34 ?        00:00:00 /u04/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -inherit

grid     23134 21458  0 03:46 pts/0    00:00:00 grep tns

-bash-4.1$ tnsping racdb

TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 24-NOV-2014 03:47:18

Copyright (c) 1997, 2011, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RACDB)))

OK (10 msec)

-bash-4.1$ lsnrctl status racdb

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 24-NOV-2014 03:45:28

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac-scan)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=RACDB)))

STATUS of the LISTENER

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

Alias                     LISTENER_SCAN1

Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production

Start Date                24-NOV-2014 03:34:31

Uptime                    0 days 0 hr. 10 min. 57 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u04/app/11.2.0/grid/network/admin/listener.ora

Listener Log File         /u04/app/11.2.0/grid/log/diag/tnslsnr/rac1/listener_scan1/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))

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

Services Summary...

Service "RACDB" has 1 instance(s).

  Instance "RACDB1", status READY, has 1 handler(s) for this service...

Service "RACDBXDB" has 1 instance(s).

The command completed successfully

對于db_unique_name,這個是在dataguard中需要設定的一個參數,在10g開始啟用,關于為什麼有這麼一個參數,其實可以這麼了解,如果某個主庫有一個備庫,采用dataguard來實作,并且在同一台機器上,那麼就可以使用db_unique_name來在dg環境中為db設定一個唯一的值。