實驗一:
修改db_domain和service_name
我們將Db_name和Db_domain兩個參數用’.’連接起來,表示一個數據庫,並將該數據庫的名稱稱為Global_name即等於service_name,即它擴展了Db_name。
SYS@VDEDU > show parameter db_domain--查看db_domain
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_domain string
SYS@VDEDU > alter system set db_domain='oracle.com' scope=spfile;
System altered.
tnsnames.ora是Oracle客戶端的網絡服務名配置文件,用於存放該客戶端配置的可連接實例的參數
可以在tnsname里修改service_name,加上.oracle.com
lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 31-MAY-2018 16:27:17
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle01)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 31-MAY-2018 14:25:47
Uptime 0 days 2 hr. 1 min. 30 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.4/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/oracle01/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle01)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "VDEDU.oracle.com" has 1 instance(s).
Instance "VDEDU", status READY, has 1 handler(s) for this service...
Service "VDEDUXDB.oracle.com" has 1 instance(s).
Instance "VDEDU", status READY, has 1 handler(s) for this service...
The command completed successfully
Lsnrctl status查看service
Sqlplus / as sysdba再啟動數據庫
Quit 退出sqlplus
此時再登錄,就可以了
[oracle@oracle01 admin]$ sqlplus scott/oracle@VDEDU
當客戶端有用戶想要操作數據庫的時候,比如說在數據庫下建表,插入、刪除數據,這個時候用戶需要登錄認證,而用戶的登錄就是一次連接請求,是客戶端與服務器的連接,oracle服務器需要監聽到這個請求,然后對此連接的用戶名密碼進行判斷,因此必須要有一個監聽進程,就是用來監聽客戶端的連接以及斷開請求,這就決定了運行連接命令 SQL>conn /as sysdba之前必須已經啟動了監聽進程
數據庫啟動時,查看lsnrctl status可以看到動態監聽、靜態監聽和對應實例
關閉數據庫時只能看到靜態監聽
實驗二
設置靜態監聽
首先進去$ORACLE_HOME/network/admin目錄下,修改listener.ora
寫入靜態參數,注意第一行頂格寫,下面的行都不要頂格寫
SID_LIST_LISTENER = ##(此處應與監聽名相同)
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = kingsql_static) ##(Service_name)
(ORACLE_HOME =/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=VDEDU) ##(實例)
) )
Lsnrctl reload 監聽文件重載
關閉數據庫
此時再查看lsnrctl status,只能看到靜態監聽
sqlplus sys/oracle@192.168.183.132:1521/kingsql_static as sysdba此時數據庫如果沒有啟動也能進入
Sqlplus scott/oracle@192.168.183.132:1521/kingsql_static
配置靜態監聽的好處:靜態注冊,不管數據庫有沒有打開,監聽都已經啟動。而動態監聽是數據庫開啟之后才啟動。
注冊就是將數據庫作為一個服務注冊到監聽程序。
客戶端不需要知道數據庫名和實例名,只需要知道該數據庫對外提供的服務名就可以申請連接到數據庫。
這個服務名可能與實例名一樣,也有可能不一樣。
在數據庫服務器啟動過程中,數據庫服務器會向監聽程序注冊相應的服務(無論何時啟動一個數據庫,默認地都有兩條信息注冊到監聽器中:數據庫服務器對應的實例和服務)
相當於是這樣:在數據庫服務器和客戶端之間有一監聽程序(Listener),在監聽程序中,會記錄相應數據庫對應的服務名(一個數據庫可能對應有多個服務名),當客戶端需要連接數據庫時,只需要提供服務名,就可以建立客戶端和服務器之間的連接.
動態注冊不需要顯示的配置listener.ora文件,實例MOUNT時,PMON進程就會根據instance_name,service_name參數將實例和服務動態注冊到listerer中。
動態監聽的優點:
(1)不需要人工干預,在lsnrctl start后,會自動注冊數據庫的instance_name,service_name,然后tns不論使用SID和SERVICE_NAME均可以連接上來
(2)修改了SERVICE_NAME或者SID不用修改listener.ora文件
(3)動態注冊的數據庫通過狀態信息中的狀態READY或狀態BLOCKED(對於一個備用數據庫)來指明。
不管關閉何時數據庫,動態注冊的數據庫都會動態地從 監聽器注銷,而與之相關的信息將從狀態列表中消失。
這樣,不管數據庫是在運行還是已經關閉,監聽器總是知道它的狀態。
該信息將被用於連接請求的回退(fallback)和負載平衡。動態監聽由PMON進程會向監聽進行動態注冊,也可以手動注冊:ALTER SYSTEM REGISTER;
實驗三
創建第二個監聽程序
編輯listener.ora
LSNR2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle01)(PORT = 1528))
(ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1528))
)
)
查看本地監聽
SYS@VDEDU>show parameter local_Listener
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string
修改數據庫本地監聽,使數據庫的登錄向LSNR2申請
SYS@VDEDU>alter system set local_listener=’(ADDRESS = (PROTOCOL = TCP)(HOST = oracle01)(PORT = 1528))’;
System altered.
重啟數據庫
Lsnrctl start/stop/status/reload=Lsnrctl start/stop/status/reload LISTENER
Lsnrctl start/stop/status/reload LSNR2不能省略
修改tnsname.ora
KINGSQL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle01)(PORT = 1528))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = KINGSQL)
)
)
把端口修改為1528
再次登錄 sqlplus scott/oracle@KINGSQL 就是通過LSNR2監聽(1528端口)登錄了


