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

So Easy! Oracle在Linux上的安裝配置系列四  監聽器的配置


在創建了數庫和各種數據庫對象並裝載了數據後,下一步是在數據庫服務器與使用它的用戶之間建立連

接,Oracle Net Services使這種連接成爲可能。Oracle Net Services組件必須"存活"在客戶機和服務器上,它們一般使用TCP/IP網絡協議來建立客戶機和數據庫服務器之間的網絡連接。


 本文官方文檔位置:


http://docs.oracle.com/cd/E11882_01/network.112/e41945/listenercfg.htm#NETAG010  


爲了方便配置和管理網絡連接,Oracle提供了Oracle Net Services,它是一套在分佈式異構計算環境中提供連接方案的組件。Oracle Net Services的組成:

Oracle Net
Oracle Net Listener
Oracle Connection Manager
Oracle Net Configuration Assistant
Oracle Net Manager

Oracle Net:Oracle Net是一個初始化、建立及維護客戶機和服務器之間連接的組件。必須在客戶機和服務器上都安裝。Oracle Net主要由兩個組件構成:

Oracle Network Foundation Layer
Oracle Protocol Support

Oracle Net Listener:駐留Oracle數據庫的所有服務器還運行一個名爲Oracle Net Listener(通常也稱爲監聽器)的服務, 其主要功能是監聽客戶機服務登錄Oracle數據庫的請求。監聽器在保證客戶機服務具有與數據庫匹配的信息(協議、端口和實例名)後,將客戶機請求傳遞到數據庫。假如用戶和密碼通過認證,則數據庫將允許客戶機登錄。一旦監聽器把用戶請求交付給數據庫,客戶機和數據庫直接連接,不再需要監聽器有幫助。


Oracle Connection Manager、Oracle Net Configuration Assistant、Oracle Net Manager是幫助配置數據庫網絡連接的GUI實用程序:

Oracle Connection Manager  ----> cmctl
Oracle Net Configuration Assistant---> netca
Oracle Net Manager  ---->netmgr


連接描述符(connection descriptor):術語連接描述符用來表示數據庫連接的兩個必需的部分,數據庫服務名和地址。連接描述符的地址部分包含三個部分,分別是:連接使用的通信協議,主機名和端口號

UNIX服務器上的Oracle連接的標準端口號爲1521或1526 

下面是一個典型的連接描述符的例子:

(DESCRIPTION=
    (ADDRESS=(PROTOCOL = TCP)(HOST=IP/servername)(PORT=1521))
    (CONNECT_DATA=
           (SERVICE_NAME=orcl_Oracle.Study.org))
)

ADRESS 行指出網絡通信將使用TCP協議,HOST指定UNIX服務器,服務器上的Oracle監聽器正監聽來自端口1521的連接請求。連接描述符的ADDRESS部分也稱爲協議地址(protocol address)


連接標識符

連接標識符(connect identifier)與連接描述符緊密關聯。可把連接描述符作爲連接標識符,或者可簡單地映射一個數據庫服務名爲一個連接描述符。

下面是說明映射orcl連接標識符的例子:

orcl=
    (DESCRIPTION=
       (ADDRESS=(PROTOCOL = TCP)(HOST=IP/servername)(PORT=1521))
       (CONNECT_DATA=
              (SERVICE_NAME=orcl_Oracle.Study.org)
       )
    )


連接串

通過提供一個連接串(connects string)連接到數據庫。連接串包含用戶名/密碼組合及一個連接標識符。最常見的連接標識符之一是節點服務名,它是一個數據庫服務的名字。

下面的例子給出一個連接串,它把一個完整的連接描述符作爲連接標識符:

CONN scott/tiger@(DESCRIPTION=
                                       (ADDRESS=(PROTOCOL = TCP)(HOST=IP/servername)(PORT=1521))
                                       (CONNECT_DATA=
                                            (SERVICE_NAME=orcl_Oracle.Study.org)
                                       )
                                )

下面是一個更簡單的連接到相同數據庫的方法,它使用連接標識符orcl:

CONN scott/tiger@orcl


監聽器和連接 

Oracle監聽器是一個只運行在服務器上並監聽連接請求的服務。Oracle提供一個名爲lsnrctl的實用程序來管理監聽器。監聽器的配置文件是listener.ora該文件默認的位置在unix系統爲$ORACLE_HOME

/network/admin 該文件是監聽器進程的配置文件,監聽器的默認名爲listener,關於listener就不多說了,它是一個獨立運行在Oracle服務器上的進程,接受遠程對數據庫的接入申請並交付給oracle的服務器進程。所以如果不是使用的遠程的連接,並且不需要使用OEM時,listener進程就不是必需的,同樣的如果關閉listener進程並不會影響已經存在的數據庫連接。因爲監聽器只運行在服務器上,因此在客戶機的機器上沒有listener.ora文件。

下面是一個最簡單的監聽器的例子:

LISTENER =
         (ADDRESS_LIST=
         (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
         (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))
 )

這個例子只給出了監聽器的名字(LISTENET)和監聽的協議地址。


監聽器命令監聽器的啓動、停止和查看監聽器的狀態

啓動監聽器

$ lsnrctl start

停止監聽器

$ lsnrctl stop

查看監聽器的狀態 

$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 17-APR-2015 01:42:43

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

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=Oracle.Study)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 16-APR-2015 19:20:49
Uptime 0 days 6 hr. 21 min. 53 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=oracle.Study)(PORT=1521)))
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


輸出說明了監聽器啓動了多長時間,監聽器的配置文件位於何處,它還給出監聽器爲連接請求而監聽的數據庫名稱。

Services Summary部分,相應的狀態可具有如下的某個值:

READ :此實例可接受連接 

BLOCKED:此實例不能接受連接 

UNKNOWN:此實例在listerer.ora文件中註冊而不是通過動態服務註冊,因而不知道其狀態


進入lsnrctl實用程序,使用help,可以查看更多監聽器的命令

[oracle@Oracle admin]$ lsnrctl 

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 17-APR-2015 01:49:21

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

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> help
The following operations are available
An asterisk (*) denotes a modifier or extended command:

start                        stop                status              
services                    version           reload              
save_config              trace              spawn              
change_password      quit                exit                
set*                          show*              


實例:

So Easy! Oracle在Linux上的安裝配置系列三中創建了數據庫,並啓動了實例,以下示例在服務器上創建監聽器配置文件並從win7中使用oracle即時客戶端和sql*plus連接到數據庫

以下是在服務器上創建的監聽器配置文件:

$ cd $ORACLE_HOME/network/admin
$ vim listener.ora
LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.23.130)(PORT=1521))
(ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))
)

啓動監聽器查看監聽器的狀態(lsnrctl status),可以看到監聽器讀取的的配置文件爲我們創建的文件,並且到實例已經READ,如下:

$ lsnrctl start 

wKioL1UwkbahSGUIAARZOqhJ1nc039.jpg

到官網下載Windows版的Oracle即時客戶端和windors版的Sql * Plus把兩個軟件解壓到相同的文件夾,並放在任意的目錄下,我這裏是c盤根目錄的instantclient_11_2文件夾:

http://download.oracle.com/otn/nt/instantclient/112010/instantclient-sqlplus-win32-11.2.0.1.0.zip
http://download.oracle.com/otn/nt/instantclient/112010/instantclient-basic-win32-11.2.0.1.0.zip

在instantclient_11_2文件夾的根目錄下創建兩個文件tnsnames.ora和sqlnet.ora這兩個文件可以放在任意位置,但必須用TNS_ADMIN環境變量指定。

tnsnames.ora的文件內容如下

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

tnsnames.ora文件是本地命名方法的配置文件,該文件包含的內容爲網絡服務名映射到連接描述符,或網絡服務名映射到監聽協議地址,以上示例中DESCRIPTION包含連接描述符,ADDRESS包含協議及地址,CONNECT_DATA包含數據庫服務標識信息。


sqlnet.ora文件的作用:

1.限制客戶端訪問(如指定客戶端域爲不允許訪問)
2.指定命名方法(local naming,directory nameing...)的優先級
3.啓用日誌及跟蹤(log and trace)功能
4.通過特定進程來路由客戶端連接
5.配置外部命名(第三方連接程序,如c語言寫的)參數
6.配置Oracle的高級安全
7.使用協議特定的參數限制對數據庫的訪問

常用參數設置
1.設置windows下允許使用windows nt本地認證
SQLNET.AUTHENTICATION_SERVICES=(nts)

2.設置Oracle客戶端連接串命名查找順序
NAMES.DIRECTORY_PATH=(tnsnames, onames,ezconnect)
允許的值有:
1.tnsnames使用客戶端的tnsnames.ora解析
2.ldap使用目錄訪問協議解析,需要有目錄服務
3.ezconnect or hostname,允許使用tcp/ip連接串,包含主機名,端口,服務名
4.cds分佈式環境的數據庫名
5.nis (Network Information Service (NIS) external naming method),主要用於外部程序解析
6.onames:通過Oracle Name Server解析


3.設置客戶端連接會話超時時間(單位分鐘)
定期檢測客戶端是否還是活動的,設置爲0不檢測
SQLNET.EXPIRE_TIME = 10
另外還有:

客戶端建立連接超時時間(單位秒,默認60)
SQLNET.INBOUND_CONNECT_TIMEOUT=10
Oracle建議在listener.ora中也進行配置

接受超時時間(單位秒)
SQLNET.RECV_TIMEOUT=3

發送超時時間(單位秒)
SQLNET.SEND_TIMEOUT=3


4.客戶端限制
是否進行限制(默認no):
TCP.VALIDNODE_CHECKING
如:TCP.VALIDNODE_CHECKING=yes
限制客戶端訪問
TCP.EXCLUDED_NODES=(hostname | ip_address, hostname | ip_address, ...)
如:TCP.EXCLUDED_NODES=(financ, mkt, 144.25.5.25)
允許客戶端訪問,會覆蓋限制訪問
TCP.INVITED_NODES=(hostname | ip_address, hostname | ip_address, ...)
如:TCP.INVITED_NODES=(sale, h, 144.185.5.73)

5.設置立即發送
設置等待一段時間或者數據包湊夠多大才會一起發送,或者可以讓數據立即發送
TCP.NODELAY=yes

6.設置使用專享連接還是公用鏈接
設置爲on會在客戶端連接串後加上(SERVER=dedicated)
USE_DEDICATED_SERVER=on/off

本例爲:

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

sqlnet.sql文件官方文檔位置:

http://docs.oracle.com/cd/E11882_01/network.112/e10835/sqlnet.htm

在xshell中新建一個窗口,切換到instantclient_11_2目錄,在windows版的sql *plus中以sys用戶使用dba權限連接數據庫:

[C:\Users\chencheng]$ cd c:\instantclient_11_2 
[C:\instantclient_11_2]$
[C:\instantclient_11_2]$ sqlplus sys/oracle@orcl as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 17 13:21:05 2015

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

ERROR:
ORA-01031: insufficient privileges


Enter user-name:

出現ORA-01031錯誤: insufficient privileges 。

使用一般用戶以非dba權限登錄是可以的,但實例必須被啓動.如:

[C:\instantclient_11_2]$ sqlplus system/oracle@orcl

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 17 22:24:13 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

SQL> col tablespace_name for a14
SQL> col file_name for a50
SQL> set linesize 32767
SQL> SELECT file_name,tablespace_name FROM dba_data_files;

FILE_NAME                            TABLESPACE_NAM
--------------------------------------------------               --------------
/u01/app/oracle/admin/oradata/orcl/system01.dbf    SYSTEM
/u01/app/oracle/admin/oradata/orcl/sysaux01.dbf     SYSAUX
/u01/app/oracle/admin/oradata/orcl/undotbs01.dbf   UNDOTBS
/u01/app/oracle/admin/oradata/orcl/users01.dbf     USERS


不能以DBA身份登錄要解決這個問題就要說到密碼文件:

密碼文件(password file)是一個可選的文件,允許遠程SYSDBA或管理員訪問數據庫。

啓動Oracle時,還沒有數據庫可以用來驗證密碼。在"本地"系統上啓動Oracle時(也就是說不在網絡上,而是從數據庫實例所在的機器啓動),Oracle會利用操作系統來執行這種認證。


注意:我們在xshell中使用ssh協議連接linux服務器,在linux命令行下使用

$ sqlplus  / as sysdba 

連接數據庫是屬於本地連接,而非遠程連接 

安裝Oracle時,會要求完成安裝的人指定管理員"組"。在unix/Linux上,這個組一般默認爲DBA,不過,也可以是平臺上任何合法的組名。這個組很"特殊"因爲這個組的任何用戶都可以作爲SYSDBA連接Oracle,而無需指定用戶名或密碼。如,在安裝Oracle Database 11g Release 2時,我指定了一個dba組。dba組中的任何用戶都無需用戶名/密碼就能連接:

[root@Oracle ~]# useradd -G dba  were
[root@Oracle ~]# su - were
[were@Oracle ~]$ export ORACLE_BASE=/u01/app/oracle
[were@Oracle ~]$ export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
[were@Oracle ~]$ export ORACLE_SID=orcl
[were@Oracle ~]$ export PATH=$PATH:$ORACLE_HOME/bin
[were@Oracle ~]$ sqlplus  / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 17 09:36:13 2015

Copyright (c) 1982, 2009, 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.
SQL> exit

[were@Oracle ~]$ sqlplus  / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 17 09:43:10 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> SHOW USER;  
USER is "SYS"

SQL> SELECT instance_name FROM v$instance;

INSTANCE_NAME
----------------
orcl

這是可以的,成功地連接了oracle,現在我能啓動這個數據庫,將其關閉,或者完成我想做的任何管理工作。不過,假設我從另外一臺機器通過網絡完成這些操作,會怎麼樣呢?問題的答案就是ORA-01031錯誤 。

在網絡上,對於SYSDBA的操作繫系統認證不再湊效,即使把

REMOTE_LOGIN_PASSWORDFILECD

參數設置爲TRUE也不例外。所以,操作系統認證不可行。如前所述,如果想啓動一個實例進行裝載,並打開一個數據庫,根據定義還沒有數據庫,也無法從中查找認證的詳細信息。但是這裏我打開了數據庫但還是沒辦法使用dba權限遠程訪問,還是出現ORA-01031: insufficient privileges錯誤。

因此密碼文件"應運而生"。密碼文件保存了一個用戶名和密碼列表,這些用戶名和密碼分別對應於可以通過網絡遠程認證爲SYSDBA的用戶。Oracle必須使用這個文件來認證用戶,而不是數據庫中存儲的正常密碼文件。

下面校正這種情況。首先,我們要本地啓動數據庫,以便設置REMOTE_LOGIN_PASSWORDFILE.

查看REMOTE_LOGIN_PASSWORDFILE的值

SQL> show parameter remote_login_passwordfile

NAME      TYPE    VALUE
-------------------------------  ---------------  ------------------------------
remote_login_passwordfile    string    EXCLUSIVE

這個參數有三種值:

NONE:沒有密碼文件 ,不存在"遠程SYSDBA"登錄

SHARED:多個數據庫可以使用同樣的密碼文件

EXCLUSIVE:只有一個數據庫使用了一個給定的密碼文件 

在Oracle 11g R2中這個參數的默認值就是EXCLUSIVE

 

假如remote_login_passwordfile參數的值不是EXCLUSIVE修改方法如下,但實例啓動和運行時,這個設置不能動態改變,所以不得不關閉、要想認它生效必需重啓實例

SQL> ALTER SYSTEM SET remote_login_passwordfile=exclusive SCOPE=spfile;

下一步是使用命令行工具orapwd創建和填寫這個初始的密碼文件:

$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=20

這樣創建了一個名爲oraporcl的密碼文件,這個文件存放在$ORACLE_HOME/dbs目錄中.

目前該文件中只有一個用戶,也就是用戶sys,儘管數據庫上還有其他SYSDBA賬戶,但是它們還不在密碼文件中,不過基於以上設置 ,我們可以第一次作爲SYSDBA通過網絡連接oracle

[C:\instantclient_11_2]$ sqlplus sys/oracle@orcl as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 17 21:55:21 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

SQL> SHOW USER;
USER is "SYS"


小結:

本篇講了oracle基本的網絡連接,對網絡相關的三個配置文件做了最簡單的配置,講了密碼文件 ,並實現了在實例啓動的情況下,從遠程計算機通過即時客戶端以dba權限登錄數據庫。

未完成的內容,在沒有實例啓動的情況下從遠程登錄oracle並啓動數據庫。監聽器的動態配置和靜態配置、oracle的四種連接方法



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

                                                                                                                                                   qq:276631587

                                                                                                                                               good luck!


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