1. 程式人生 > >oracle課堂筆記--第十八天

oracle課堂筆記--第十八天

width cat 工作 反饋 三種 刪掉 reload 殺死 alter

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課堂筆記--第十八天