標籤:dba and 共用 services home acl 11.2 維護 訪問
Oracle NET
1.用戶端通過@ora10g的名字去tnsname.ora檔案擷取伺服器的具體串連資訊
2.用戶端通過tnsname.ora中的描述向伺服器發出連結請求伺服器端
3.伺服器的監聽器接收到串連請求後,驗證請求的服務的有效性
4.伺服器端產生一個服務進程和用戶端進程建立串連
查看會話建立過程:
$ netstat -tlnp | grep 1521
$ sqlplus sys/[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 sys/[email protected]:1521/orcl as sysdba 報錯
$ sqlplus sys/[email protected]:15210/orcl as sysdba
刪除配置:
SQL> ALTER SYSTEM SET LOCAL_LISTENER=‘‘;
SQL> ALTER SYSTEM register;
$ vi tnsnames.ora 刪除listener15210別名
netca刪除15210連接埠的監聽
用戶端配置
輕鬆串連:
$ sqlplus sys/[email protected]:1521/orcl as sysdba
適用於臨時性的串連
本地命名:
查看現有的主機連接字串
$ cd $ORACLE_HOME/network/admin
$ vi tnsnames.ora 解析
$ sqlplus sys/[email protected] as sysdba
使用netca添加新的主機連接字串orcl192
$ sqlplus sys/[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 sys/[email protected]_default as sysdba
$ sqlplus sys/[email protected]_dedicated as sysdba
$ sqlplus sys/[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課堂筆記--第十八天