So Easy! Oracle在Linux上的安裝配置系列六

So Easy! Oracle在Linux上的安裝配置系列六


oracle數據庫的幾種連接方法


上篇內容回顧

一個監聽器配置文件中有一個或多個監聽的協議地址,支持服務器的信息和控制運行時行爲的參數,監聽器配置存儲在名爲listener.ora的配置文件中,因爲所有的配置參數都有默認值,所以在沒有配置的情況下它仍然可以被啓動和使用,這個默認監聽器名字是LISTENET,它監聽在以下TCP/IP協議地址,(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1521))但這個默認監聽器它在啓動時不支持任何的服務 監聽器轉發客戶端的請求到支持的服務上,服務能被靜態的配置在linstener.ora文件中,也能自動註冊到監聽器中,Oracle PMON 進程負責向監聽器動態服務註冊新Oracle數據庫服務名,也就是說,在創建新oracle數據庫時,它們將自動向監聽器註冊服務,PMON進程將在每個新數據庫在服務器上創建之後更新listerer.ora文件。

爲了完成自動服務註冊,init.ora文件或spfile必須包含以下參數:

SERVICE_HAMES

INSTANCE_NAME

動態服務註冊不要求在listener.ora文件中做任何手動配置

Listener主要負責下面的幾方面功能

配置簡單減少了必須的參數SID_LIST_LISTENER_NAEME

連接時的故障轉移 

連接的負載均衡


配置客戶機以連接到數據庫,可使用4種可行的方法之一連接到某個Oracle數據庫, 這4種方法分別爲:本地命名

簡易連接命名

目錄命名

外部命名

在前面的文單中,說明了連接描述符和連接標識符,連接標識符可以是連接描述符本身,也可以是一個能解析爲連接描述符的簡單名字(如orcl),一般使用的簡單連接標識符稱爲net service name(網絡服務名),使用網絡服務名需要維護網絡服務名和連接描述符信息之間所有映射的一箇中心信息庫(central repository),以便Oracle驗證這些網絡服務名。因此,在一個用戶使用網絡服務名orcl啓動連接進程時

.oracle將搜索中心信息庫查找orcl的連接描述符。找到連接描述符後,Oracle Net會爲指定服務器上的數據庫初始化一個連接 

Oracle允許幾種類型的命名信息庫,可用下列4種命名方法訪問存儲在這些位置中的映射信息。

本地命名(local nameing):使用存儲在每個客戶機上的名爲tnsname.ora的文件連接到數據庫服務器

簡易連接命名(easy connect nameing):允許連接而無需任何服務名配置

外部命名(external nameing):使用第三方命名來解析服務名

目錄命名(driectory nameing):使用一個集中式的符合LDAP的目錄服務器來解析服務名


對應的配置客戶機以連接到數據庫,可使用4種可行的方法之一連接到某個Oracle數據庫, 這4種方法分別爲:本地命名

簡易連接命名

目錄命名

外部命名

不管使用的是何種命名方法,名字解析過程都是相同的。每種命名法都遵循以下步驟將連接描述符解析爲網絡服務名.

①、選擇命名方法----本地、簡易連接、外部命名或目錄服務命名

②、映射連接描述符到服務名

③、配置客戶機以使用步驟1中選擇的命名方法


本命名法

之前的示例中其實我們使用的就是本地命名法,使用這種方法,在名爲tnsnames.ora的本地化配置文件 中存儲服務名及其連接描述符,此文件默認存儲在$ORACLE_HOME/network/admin目錄中.

可將tnsnames.ora文件視爲一個類似於/etc/hosts的文件,後者包含UNIX/linux系統的網絡信息

除tnsnames.ora文件外,如果客戶機機器使用本地命名方法的話,還要使用另一個名爲sqlnet.ora的文件 ,sqlnet.ora文件位於每個客戶機上,它包含重要的網絡配置參數 

sqlnet.ora的配置項,第四篇文章中有講到。

tnsnames.ora和sqlnet.ora配置文件在UNIX/linux系統上位於$ORACLE_HOME/network/admin目錄中。不過,這兩個文件可放置於任何你想放的地方。如何把它們放在非默認位置,則必須使用TNS_ADMIN環境變量爲Oracle指定這兩個文件的位置

一個手工編寫的trnsames.ora文件的示例

orcl =
(DESCRIPTION=
       (ADDRESS_LIST=
     (ADDRESS = (PROTOCOL = TCP)(HOST=192.168.23.130)(PORT = 1521))
               )
       (CONNECT_DATA =
     (SERVICE_NAME = orcl_Oracle.Study.org)
       )
        )

sqlnet.ora文件的內容

NAMES.DIRECTORY_PATH= (TNSNAMES,EZCONNECT)
SQLNET.AUTHENTICATION_SERVICES= (NTS)

最後一行說明Oracle Net將用來解析連接標識符爲連接描述符的連接方法.NAMES.DIRCROTY_PATH參數指定Oracle Net將用來解析連接標識符爲連接描述符的命名方法的順序。在本例中,TNSNAMES

爲第一設置 ,因此Oracle Net將默認使用tnsnames.ora文件。如果它不能使用tnsname.ora文件進行連接。則試着通過EZCONNECT方法進行連接 。

如果希望將EZCONNECT定爲默認方法,可手動編輯sqlnet.ora文件,使SZCONNECT成爲NAMES.DIRECTORY_PATH參數中的第一個值,如下所示:

NAMES.DIRECTORY_PATH= (EZCONNECT,TNSNAMES,)
SQLNET.AUTHENTICATION_SERVICES= (NTS)


簡易連接命名

簡易連接方法的唯一條件是必須在客戶機和服務器上都具有TCP/IP協議的支持,而無須配置tnsname.ora文件,  服務器也必須有靜態註冊監聽設置 

下面是這種新連接方法的一般句法:

CONNECT "host[:port][/service_name][:server][/instance_name]"

也可以使用sys以DBA身份登錄

CONNECT "host[:port][/service_name][:server][/instance_name]" as sysdba


簡易連接法實驗:

  1. 查看監聽器狀態可以看到服務器有靜態註冊的設置

$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 19-APR-2015 23:20:18

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.23.130)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                           LISTENER
Version                      TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                19-APR-2015 19:35:53
Uptime                       0 days 3 hr. 44 min. 25 sec
Trace Level                off
Security                    ON: Local OS Authentication
SNMP                        OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/Oracle/listener/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.23.130)(PORT=1521)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))
Services Summary...
Service "orcl_Oracle.Study.org" has 1 instance(s).
 Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

2 .查看數據庫是否啓動 沒有後臺進程也沒有共享內容段

$ ps -ef | grep ora
oracle     2450      1        0 19:35 ?           00:00:07 /u01/app/oracle/product/11.2.0/db_1/bin/tnslsnr LISTENER -inh
root       3494      3468  0 22:58 pts/0    00:00:00 su - oracle
oracle     3496     3494  0 22:58 pts/0    00:00:00 -bash
oracle     3653      1        0 23:04 ?          00:00:00 oracleorcl (LOCAL=NO)
root       3688   3661     0 23:08 pts/1    00:00:00 su - oracle
oracle     3690   3688    0 23:08 pts/1    00:00:00 -bash
oracle     3774   3690    1 23:22 pts/1    00:00:00 ps -ef
oracle     3775   3690   0 23:22 pts/1    00:00:00 grep ora

$ ipcs -a

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      

------ Semaphore Arrays --------
key        semid      owner      perms      nsems    

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages


3.使用sys以dba權限在win7即時客戶端中的SQL * Plus 中使用簡易連接法連接oracle服務器

[D:\instantclient_11_2]$ sqlplus sys/[email protected]:1521/orcl_Oracle.Study.org as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:27:32 2015

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

Connected to an idle instance.

可以是可以連接上的

以下我們在用普通用戶連接 

[c:\~]$ cd d:\instantclient_11_2
[D:\instantclient_11_2]$ sqlplus wolf/[email protected]:1521/orcl_Oracle.Study.org

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:23:46 2015

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

ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0

可以看到普通用戶在實例沒有啓動的時候無法連接到數據庫


下面我們用sys用戶使用dba權限登錄數據庫並啓動數據庫實例

[D:\instantclient_11_2]$ sqlplus sys/[email protected]:1521/orcl_Oracle.Study.org as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:27:32 2015

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

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size    2220200 bytes
Variable Size  616566616 bytes
Database Buffers  444596224 bytes
Redo Buffers    5554176 bytes
Database mounted.
Database opened.

普通用戶也可以登錄了

[D:\instantclient_11_2]$ sqlplus wolf/[email protected]:1521/orcl_Oracle.Study.org

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:28:30 2015

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

4. 在服務器監聽文件中註釋掉靜態註冊監聽項:

SID_LIST_LISTENER=
#(SID_LIST=
#         (SID_DESC=
#             (GLOBAL_DBNAME=orcl_Oracle.Study.org)
#             (SID_NAME=orcl)
#             (ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)
#         )
#)

LISTENER=
 (DESCRIPTION=
      (ADDRESS_LIST=
            (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.23.130)(PORT=1521))
            (ADDRESS=(PROTOCOL=ipc)(KEY=extproc))
      )
 )

5.重新加載監聽器配置文件 

$ lsnrctl reload
$ lsnrctl status


LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 19-APR-2015 23:43:55

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.23.130)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                19-APR-2015 23:42:16
Uptime                    0 days 0 hr. 1 min. 38 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/Oracle/listener/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.23.130)(PORT=1521)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))
Services Summary...
Service "orcl.Oracle.Study" has 1 instance(s).
 Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orcl_Oracle.Study.org" has 1 instance(s).
 Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully

可以看到監聽器沒有靜態註冊設置了

數據庫實例也是啓動的

SQL> COL host_name FOR a14
SQL> COL instance_name for a14
SQL> SELECT host_name,instance_name,status FROM v$instance;

HOST_NAME      INSTANCE_NAME  STATUS
--------------       ----------------------   ----------------
Oracle.Study     orcl                             OPEN

6.使用win7即進客戶端連接遠程oracle服務器,依然可以連接 

$ sqlplus wolf/[email protected]:1521/orcl_Oracle.Study.org

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:37:17 2015

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

7.關閉數據庫實例

[oracle@Oracle admin]$ sqlplus  / as sysdba 

SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 19 23:46:47 2015

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

8.使用win7即進客戶端連接遠程oracle服務器

[D:\instantclient_11_2]$ sqlplus sys/[email protected]:1521/orcl_Oracle.Study.org as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:43:21 2015

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

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

這個實驗說明,監聽器在沒有靜態註冊設置的時候如果實例沒啓動是無法連接到數據庫的,這也很容易理解,因爲數據庫相對於客戶端來說,它表現爲一個服務,監聽器只是這個數據庫服務的一個代理。動態註冊是數據庫實例啓動後,由PMON進程把數據庫服務註冊進監聽器, 現在實例沒啓動也就不存在可註冊的服務了.

下面啓動實例,並恢復listener.ora靜態註冊部分重新加載監聽器配置文件重命名上次課創建的密碼文件

[oracle@Oracle ~]$ cd $ORACLE_HOME/dbs 
[oracle@Oracle dbs]$ ls
hc_orcl.dat  init.ora  initorcl.ora  lkORCL  orapworcl
[oracle@Oracle dbs]$ mv orapworcl orapworcl.bk

嘗試使用普通用戶和DBA進行遠程連接 

[D:\instantclient_11_2]$ sqlplus wolf/[email protected]:1521/orcl_Oracle.Study.org

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:45:33 2015

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing option

[D:\instantclient_11_2]$ sqlplus sys/[email protected]:1521/orcl_Oracle.Study.org as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 20 15:55:23 2015

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

ERROR:
ORA-01031: insufficient privileges

可以看到普通用戶可以連接,而dba用戶連接時出錯,這就是密碼文件的作用

以上實驗證明連接時的過程都是一樣的,只是連接方法語句不同


外部命名法

外部命名法就是使用像NIS(Network Infomation Service)這樣的外部命名服務 

目錄命名法這裏不做解釋




本篇的內容到此爲止,恭候閱讀,不對的地址請批評指證,討論. 

                                                                                                                                                   qq:276631587

                                                                                                                                               good luck!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章