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
簡易連接法實驗:
查看監聽器狀態可以看到服務器有靜態註冊的設置
$ 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!