oracle課堂筆記--第十八天
Oracle NET
[email protected]器的具體連接信息
2.客戶端通過tnsname.ora中的描述向服務器發出鏈接請求服務器端
3.服務器的監聽器接收到連接請求後,驗證請求的服務的有效性
4.服務器端產生一個服務進程和客戶端進程建立連接
查看會話建立過程:
$ netstat -tlnp | grep 1521
$ sqlplus [email protected] as sysdba
$ netstat -tnp | grep sqlplus
$ kill -9 1234 殺死維護sqlplus的進程
監聽的配置
配置文件:
$ vi $ORACLE_HOME/network/admin/listener.ora
通過netca添加新的監聽服務Listener15210,端口使用15210
$ vi listener.ora
$ netstat -tln|grep 1521
$ lsnrctl status listener15210
通過netmgr配置高級選項
通過lsnrctl命令來啟動/停止/查看/重載監聽器/服務
lsnrctl start|stop|status|reload|service
指定監聽的名稱:
$ lsnrctl status listener15210 監聽信息
網絡環境變化,需要檢查listener.ora和/etc/hosts文件
netca刪除Listener15210
實例的配置(數據庫)
靜態註冊和動態註冊
什麽是靜態註冊
就是監聽器的配置文件中寫明了監聽哪個實例 需要配置SID_DESC字段
定位實例的方式可以使用SID_NAME或者SERVICE_NAME來定位
什麽是動態註冊
就是監聽器的配置文件中沒寫明監聽哪個實例
要通過PMON告知監聽器要監聽的具體實例
PMON是將SERVER_NAME告訴給監聽器 這個過程就是註冊
默認一分鐘PMON註冊一次 也就是說啟動監聽 還沒註冊時 是無法連接的
添加3種方式,後面的刪掉,用文檔改寫
區分靜態註冊和動態註冊
lsnrctl status
是 ready 就是動態
是 unknow 就是靜態
靜態註冊listener.ora文件信息:
$ vi listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME =ora11g)
)
)
$ lsnrctl reload
.....
Services Summary...
Service "ora11g" has 1 instance(s).
Instance "ora11g", status UNKNOWN, has 1 handler(s) for this service...
狀態總是顯示未知的,當有請求時,監聽器才去確認數據是否存在
動態註冊
Oracle9i起實例使用動態服務註冊來通知監聽程序有關其數據庫服務的信息。
服務註冊依賴PMON 進程向監聽程序註冊實例信息 註冊間隔為1分鐘左右
手動註冊命令 alter system register;
無需在listener.ora 文件中設置任何信息 此文件可以不存在
3種註冊方式:
本地默認端口監聽 (監聽和數據庫在一臺主機 不需改配置)1521
本地非默認端口監聽 (監聽和數據庫在一臺主機,需改配置,知道端口在哪,端口不是1521)
遠程監聽 (不在一臺主機上)
本地非默認端口:
netca創建listener15210,使用15210端口
$ netstat -tlnp | grep 15210
寫入監聽的別名:
$ cd $ORACLE_HOME/network/admin
$ vi tnsnames.ora
listener15210 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1.test.com)(PORT = 15210))
)
修改參數:
SQL> ALTER SYSTEM SET LOCAL_LISTENER=listener15210;
SQL> ALTER SYSTEM register; 立即註冊(可選)
服務信息已添加到新的監聽中:
$ lsnrctl status listener15210
客戶端指定新端口連接:
$ sqlplus [email protected]:1521/orcl as sysdba 報錯
$ sqlplus [email protected]:15210/orcl as sysdba
刪除配置:
SQL> ALTER SYSTEM SET LOCAL_LISTENER=‘‘;
SQL> ALTER SYSTEM register;
$ vi tnsnames.ora 刪除listener15210別名
netca刪除15210端口的監聽
客戶端配置
輕松連接:
$ sqlplus [email protected]:1521/orcl as sysdba
適用於臨時性的連接
本地命名:
查看現有的主機連接字符串
$ cd $ORACLE_HOME/network/admin
$ vi tnsnames.ora 解析
$ sqlplus [email protected] as sysdba
使用netca添加新的主機連接字符串orcl192
$ sqlplus [email protected] as sysdba
SQL> select name from v$database;
tnsping測試,不需要用戶名和口令:
$ tnsping 192.168.0.1:1521/orcl
$ tnsping orcl192
解析方法的順序:
$ vi sqlnet.ora
netca可以修改
恢復默認設置:
SQL> alter system set local_listener=‘‘;
SQL> alter sytem register;
netca刪除不需要的監聽和連接配置
共享服務器模式
專有服務和共享服務模式
專有模式
每個用戶進程和服務進程間通過監聽器建立連接
進程信息存放於PGA中,也就是說有多少個用戶進程就有多少個PGA產生
單單只有進程連接還不足以操作數據庫,還需要產生的會話信息
會話信息存儲在UGA中,UGA在專有模式中存在於PGA
因為進程和進程間是相互隔離的,所以會話信息也相對獨立
這就導致了服務進程只能獲知當前用戶進程的會話請求信息 只能為當前用戶進程服務
共享模式
用戶進程的請求被監聽器接收,監聽器不委派服務器進程,而是將調度器信息返回給客戶端
調度器將用戶進程的請求放入請求隊列
多個服務進程中的一個服務進程從隊列中獲取用戶進程的請求,並處理這個用戶進程的請求
服務進程處理完後將處理結果放入響應隊列,每個調度器都有自己的響應隊列
響應隊列的信息反饋給對應的調度器
調度器再把服務進程處理的結果返回給用戶進程
共享模式中的用戶進程的會話信息對每一個服務器進程來說都是可見的.
因為共享模式的UGA信息存在於SGA中,所以此時一個用戶進程的請求可以由多個服務進程來完成.
共享服務器的配置 通過初始化參數dispatchers來配置
可以通過DBCA來修改
$ lsnrctl service
SQL> show parameter disp
SQL> show parameter shared_server
專有模式和共享模式是可以兼容在一起使用的
此時看用戶如何選擇
tnsnames.ora中
ORA10G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED) # 不寫這個值就是按服務器的模式來匹配
# shared 指定使用共享方式連接
# DEDICATED 指定使用專有模式連接
(SERVICE_NAME = raw10g)
)
)
測試三種模式
ORCL_default = 默認
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1.test.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
ORCL_dedicated = 管理員
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1.test.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ORCL_shared = 共享
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1.test.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = orcl)
)
)
測試:
$ sqlplus [email protected]_default as sysdba
$ sqlplus [email protected]_dedicated as sysdba
$ sqlplus [email protected]_shared as sysdba
SQL> select SID, SERVER, PROGRAM from v$session where USERNAME=‘SYS‘;
SQL> select distinct sid from v$mystat;
管理維護、大數據量導入、備份恢復等工作不適合用共享方式:
SQL> shutdown immediate 共享連接下不能發布管理命令
恢復原有設置:
dbca修改為dedicated方式
db link
數據庫A訪問遠程數據庫B上面的表:
在數據庫A中,使用netca創建主機描述字符串orcl_dblink指向數據庫B
$ netca
$ tnsping orcl_dblink
在數據庫A中創建數據庫鏈接:
SQL> create database link orcl_dblink_hr connect to hr identified by hr using ‘orcl_dblink‘;
using使用主機描述字符串orcl_dblink
用戶和口令都是數據庫B上的
db link的名字不要求和主機描述字符串一致
訪問數據庫B中的表:
SQL> select count(*) from [email protected]_dblink_hr;
SQL> select count(*) from hr.employees, [email protected]_dblink_hr;
oracle課堂筆記--第十八天