六、配置Oracle数据库的网络环境
1. 連接建立的過程
場景:oracle默認監聽器1521,把數據庫服務注冊到監聽器中,客戶端才能通過監聽器登錄到數據庫上操作,
數據庫的名稱是orcl,注冊后,叫服務命名
建立連接
注意:監聽器只是在連接建立的過程中起作用,一旦連接建立,客戶端直接與serverprocess交互
描述:客戶端執行sqlplus的登錄連接,服務器端有一個1521的監聽器,要通過監聽器登錄到數據庫的服務上,需要把數據庫的服務注冊到監聽器上,如orcl.example.com叫服務命名
(1)執行sqlplus登錄語句時,發送登錄請求,監聽器接收到后就會解析請求
(2)解析出來的結果有兩種:第一就是請求信息不識別,也就是發出過來的請求是錯誤的請求,這時監聽器就會直接拒絕登錄的請求,這時客戶端就會出錯,第二種請求就是解析出來的信息是正確的,就可以讓客戶端進行登錄
(3) 請求信息正確的情況下監聽器會做兩件事情: 創建PGA和ServerProcess(服務器請求,處理客戶端請求)
(4) 執行sql語句,實際是直接發送給serverprocess
2. 配置監聽器
描述:配置完數據庫后,有個默認監聽器1521,要操作必須要把數據庫(orcl.example.com)注冊到監聽器上,然后再使用不同的方法來配置監聽器
- netca
- netmgr
- OEM
- 修改配置文件: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
3. 注冊數據庫的服務
描述:把數據庫的服務注冊到監聽器上后,才能通過監聽器登錄,而且會有不同的名稱如my.example.com,就對應orcl這個名稱,
有了這種關聯就可能登錄到數據庫實例上
注冊方式
- 靜態注冊:通過修改配置文件實現
OEM操作描述: netservices管理 --> 選擇對應的lister --> 編輯 --> 靜態數據庫注冊 --> 添加 --> 填寫名稱、目錄(已經設置的目錄/u01/app/oracle/product/11.2.0/dbhome_1)、SID(數據庫名稱)
- 動態注冊:通過修改service_names參數
動態注冊問題:
(*)默認只能注冊到1521的端口上
(*)如果要注冊到不是默認的監聽端口上要修改參數,需要修改一個參數local_listener
(*)由PMON進程來實成
新開一個窗口
[oracle@oracledemo ~]$ . oraenv ORACLE_SID = [orcl] ? orcl The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle [oracle@oracledemo ~]$ sqlplus / as sysdba SQL> show parameter service_name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string orcl.example.com SQL> alter system set service_names='dev.exapmle.com'; System altered. SQL> show parameter service_name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string dev.exapmle.com另一個窗口查看
[oracle@oracledemo ~]$ lsnrctl status Service "dev.exapmle.com" has 1 instance(s).windows上測試: [c:\~]$ cd D:\oracleclient\oracle10g\instantclient_12_1 [D:\oracleclient\oracle10g\instantclient_12_1]$ sqlplus scott/tiger@192.168.56.90:1521/dev.exapmle.com SQL*Plus: Release 12.1.0.1.0 Production on Sat Jul 21 13:00:32 2018 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
4. 客戶端的連接的方式
- 簡便命名法(easy connect)
- 服務命名法: service name
客戶端的配置:本地服務名稱 --> 包含服務器IP、端口、服務名稱(netmgr)
?
[oracle@oracledemo ~]$ ls /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/ listener1807095AM2956.bak listener.ora samples shrept.lst tnsnames1807095AM2956.bak tnsnames.ora -->配置完后新增的 [oracle@oracledemo ~]$ more /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora # tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora # Generated by Oracle configuration tools. MYDEMO =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.90)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl.example.com)))[oracle@oracledemo ~]$ sqlplus scott/tiger@mydemo ##直接使用mydemo來連接 SQL*Plus: Release 11.2.0.1.0 Production on Mon Jul 9 10:52:53 2018 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL>- 目錄命名法(使用LADP服務器作為連接的方式,少用)
- 外部命名法(external naming幾乎沒人使用)
?
5. 共享服務器模式
- 專有服務器模式(默認)
(*)有一個客戶端,就有一個PGA和服務器server process
描述:客戶端登錄時,監聽器如果信息正確,監聽器就會去創建PGA和server process,server process用來接受客戶端發送過來的sql語句并執行,
如果客戶端和PGA、server process是一對一的關系,這就是專有服務器模式
- 共享服務器模式(類似于數據庫的連接池)
描述:服務器端的服務器進程包括一定信息數量是一定的,可能被一些客戶端共享
注意:管理員登錄一定是專有有服務器模式,RMAN備份和恢復也是只是專有服務器模式
工作原理:有100個客戶端,在共享服務器模式下服務器進程是一定的,如在服務器端存在5個服務器進程,也就意味著在同一個時間,服務器端只能處理5個客戶端的請求,如果有更多的請求就需要排隊,也就是5個服務器的進程會被100個客戶端所共享的,需要有一個排隊的機制在服務器端有一個監聽器,要通過它才能登錄到oracle的數據庫上,在共享服務器的模式下需要有分發器,如有3個分發器,分發器主要作用是轉發請求,不會做具體的處理
如客戶端1連接到監聽器上需要連接登錄,監聽器會在所有的分發器中找一個最不Busy的分發器進行分配給客戶端,如找到分發器1,這時監聽器就會把分發器1分配給客戶端1,這時客戶端1就可以直接執行sql語句,最終還是由server process來執行sql語句,分發器接收到請求后,會把請求放入一個請求隊列中,如果有一個server process空閑了,它就會從請求隊列中取出一個請求來執行處理
當sql語句執行完后,server process把執行的結果放入響應隊列中,當分發器將sql放入請求隊列時,實際把分發器執行的信息也放入到請求隊列中,所以當服務器進程執行完成后,實際上服務器進程的響應隊列是知道返回給那個對應的分發器,分發器得到結果后就會返回給對應的客戶端
與專有服務器模式區別是:客戶端是直接發送給server process進程
summary: 服務器端的服務進程是一定的,如果存在過客戶端就需要有一種隊列的機制來共享服務器的進程
配置:服務器進程數、分發器個數
6. 分布式數據庫基礎
- 數據物理上被存放在網絡的多個節點上,邏輯上是一個數據庫
- 特點:數據的獨立性,指的是用戶不必關心數據如何分割和存儲,只需要關心它需要什么數據,如下的訂票,用戶不會關心票的信息存在那里
例子描述:一個火車訂票的系統,網絡像是12306,可以訂全國各地的火車票,實際上北京的是存在北京的數據庫中,上海的是存在上海的數據庫中,它們在物理上就不在一個地方,但是可以通過邏輯上整合在一起
- 操作分布式數據庫:oracle支持分布式操作
描述:兩個數據庫如紅色在北京,綠色在上海,物理上不一起,可以從邏輯上看作一個數據庫,如在北京的數據為中保存部門表的信息dept,在上海的數據庫中保存上海表的信息emp,它們組成了一個分布式的環境,要在分布式的環境中操作,如要在紅色的數據庫中訪問綠色的數據庫中的數據,可以通過網絡來實現,這是數據庫的鏈路,它是有方向的.
- 定義數據庫的鏈路
CREATE DATABASE LINK [db_link_name] CONNECT TO [user_name] IDENTIFIED BY [password] USING '[tns_name]'; [db_link_name]: 是所要連接的數據庫的服務名,也就是該數據庫的真實名稱(通常就是SID) [user_name]: 是所要連接的用戶名稱 [password]: 是所要連接的用戶密碼,是遠程的數據庫 [tns_name]: 是所要連接數據庫的服務命名 如:create database link l2 conncet to scott identified by tiger using 'remoteorcl'; #不是12是l2實際配置
node1: windows xp oracle10g 192.168.56.128 node2: oracle linux oracle11g 192.168.56.90測試連接通性:
[root@oracledemo ~]# ping 192.168.56.128 PING 192.168.56.128 (192.168.56.128) 56(84) bytes of data. 64 bytes from 192.168.56.128: icmp_seq=1 ttl=128 time=1.75 ms建立數據庫鏈路(linux上oracle訪問windows xp上的oracle)
創建服務命名:linux上oracle訪問windows xp上的oracle,所有在linux機器上建立服務命名,去代表遠端windows oracle數據庫上的信息
在vnc上操作:創建一個服務命名代表遠端
在vnc上操作:創建一個服務命名代表遠端 [oracle@oracledemo ~]$ ls /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/ #VNC配置過程保存在tnsnames.ora中 listener1807095AM2956.bak listener.ora samples shrept.lst tnsnames1807095AM2956.bak tnsnames.ora [oracle@oracledemo ~]$ more /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora REMOTEORCL =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.128)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))
創建數據庫的鏈路(建立通道)
[oracle@oracledemo ~]$ sqlplus scott/tiger SQL> create database link l2 connect to scott identified by tiger using 'remoteorcl'; create database link l2 connect to scott identified by tiger using 'remoteorcl' ERROR at line 1: ORA-01031: insufficient privileges #沒有創建的權限 SQL> conn / as sysdba #切換到管理員 Connected. SQL> grant create database link to scott; #授權 Grant succeeded. SQL> conn scott/tiger #切換到scott Connected. SQL> create database link l2 connect to scott identified by tiger using 'remoteorcl'; Database link created.分布式數據庫查詢
SQL> select ename,dname #@l2是訪問windows上的oracle2 from dept,emp@l2 3 where dept.deptno=emp.deptno; ENAME DNAME ---------- -------------- SMITH RESEARCH ALLEN SALES WARD SALES JONES RESEARCH MARTIN SALES BLAKE SALES CLARK ACCOUNTING SCOTT RESEARCH KING ACCOUNTING ### TURNER SALES ADAMS RESEARCH ENAME DNAME ---------- -------------- JAMES SALES FORD RESEARCH MILLER ACCOUNTING修改windows某個用戶的數據來測試
update emp set ename='KING123' where empno='7839'; commit再查詢
SQL> / ENAME DNAME ---------- -------------- SMITH RESEARCH ALLEN SALES WARD SALES JONES RESEARCH MARTIN SALES BLAKE SALES CLARK ACCOUNTING SCOTT RESEARCH KING123 ACCOUNTING #######已經改變 TURNER SALES ADAMS RESEARCHENAME DNAME ---------- -------------- JAMES SALES FORD RESEARCH MILLER ACCOUNTING其他操作
創建別名:create synonym emp1 for emp@L2; #創建同義詞來代表遠端數據庫的表 建立遠程表的視圖:create view emp as select * from emp1@L1 union select * from emp2@L2 插入操作:insert into emp select * from emp@L2; 數據復制: create table emp as select * from emp@L2; 操作: SQL> conn / as sysdba Connected. SQL> grant create synonym to scott; Grant succeeded. SQL> conn scott/tiger Connected. SQL> create synonym remoteemp for emp@l2; Synonym created. SQL> select ename,dname2 from dept , remoteemp3 where dept.deptno=remoteemp.deptno; ENAME DNAME ---------- -------------- SMITH RESEARCH ALLEN SALES WARD SALES JONES RESEARCH MARTIN SALES BLAKE SALES CLARK ACCOUNTING SCOTT RESEARCH KING123 ACCOUNTING TURNER SALES ADAMS RESEARCHENAME DNAME ---------- -------------- JAMES SALES FORD RESEARCH MILLER ACCOUNTING 14 rows selected.分布式數據庫的跨節點更新
描述:分布式數據庫是物理上不在一起,邏輯上是整體,如北京是主數據庫,上海是從數據庫,如果在主上的數據發生更新,可以copy到從上進行備份
實現的方式
* 快照
* 定義快維護關系表的異步副本
* 指在主表修改后指定的時間內刷新副本,用于主表修改少,但頻繁查詢的表
* 觸發器
* 利用觸發器實現數據的同步,如北京的數據庫發生的更改,可以利用觸發器同步到上海
* 區別
* 觸發器是同步的,快照是異步的,使用觸發器時如果主發生更改馬上會copy到從不會有延時,這是同步,快照是過一段時間才會copy
* 觸發器是定義在主數據庫上,快照是定義在從數據庫上
觸發器的實現:當主數據庫的員工工資更改后,需要馬上同步到從數據庫的上,主是linux上的oracl,從是xp上的oracle
主數據庫上:
定義觸發器
create or replace trigger syncSalary after update on emp for each row beginupdate remoteemp set sal=:new.sal where empno=:new.empno; end; / # 觸發器的名稱為syncSalary,針對是更新后的操作update,定義在主數據庫的emp上,漲工資是要把每個員工的數據都更新到從數據庫上,所以這是一個針對行的觸發器,觸發器不需要使用變量就直接使用begin和end,這個觸發器就會在主數據庫update操作執行后去更新從數據庫,從數據為上的表同義詞remoteemp,SQL> create or replace trigger syncSalary after update on emp for each row beginupdate remoteemp set sal=:new.sal where empno=:new.empno; end; Trigger created. SQL> select ename,sal from emp where empno=7839; ENAME SAL ---------- ---------- KING 5000從數據庫上的king的工資 SQL> select ename,sal from emp where empno=7839; ENAME SAL ---------- ---------- KING123 5000主數據庫上更新: SQL> update emp set sal=6000 where empno=7839; SQL> commit; SQL> select ename,sal from emp where empno=7839; ENAME SAL ---------- ---------- KING 6000從數據庫上檢查: SQL> select ename,sal from emp where empno=7839; ENAME SAL ---------- ---------- KING123 6000
7. 使用跟蹤文件診斷監聽器
* 跟蹤文件
后綴為trc文件 --》 跟蹤會話的信息、監聽器的信息
如在會話中打開會話的跟蹤,它就會把當前會話的信息,包括執行的sql語句,以及統計信息記錄到trc文件中,通過格式化文件就可以分析當前會話中的內容
位置:
確定當前會話的跟蹤文件
(1) 授權scott用戶dba權限方便操作
(2)確定當前會話的ID
SQL> select sid from v$mystat where rownum=1; #v$是一個數據字典SID ----------37(3) 根據會話的ID來確定內存中的地址信息
SQL> select PADDR from v$session where SID=37; ##PADDR == address of process PADDR -------- 7745FC94(4) 根據地址信息確定跟蹤的會話ID,也就是操作系統的進程ID
SQL> select SPID from V$PROCESS where ADDR='7745FC94'; SPID ------------------------ 18691(5) 開啟會話跟蹤
SQL> alter session set sql_trace=true; #關閉是false,不關閉會話文件會變得很大 Session altered. [oracle@oracledemo trace]$ ls *18691* #產生了對應的文件 orcl_ora_18691.trc orcl_ora_18691.trm(*) oracle的SQL優化: 以下的是重復的SQL,可以通過這樣的跟蹤信息找到問題,不用生成多個執行計劃
注意:解決重復SQL的方法:使用綁定變量或游標共享 select count(*) from scott.emp where deptno=10; select count(*) from scott.emp where deptno=20; select count(*) from scott.emp where deptno=30; select count(*) from scott.emp where deptno=40; select count(*) from scott.emp where deptno=50; SQL> alter session set sql_trace=false;(*)使用tkprof工具對跟蹤文件進行格式化,方便人閱讀
[oracle@oracledemo trace]$ tkprof orcl_ora_18691.trc ~/a.txt sys=no sort=fchela # sys=no使用管理員產生的信息就不要進行格式化 sort=fchela根據sql的時間排序 [oracle@oracledemo trace]$ vim ~/a.txt SQL ID: 8xkd0hm6ys0p0 Plan Hash: 2083865914 會生成sql的執行計劃,這個是ID號,通過分析得到它們的執行計劃的ID號都是一樣的,會影響SQL的性能 select count(*) fromscott.emp where deptno=10 call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 1 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 2 0.00 0.00 0 7 0 1 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 0.00 0.00 0 8 0 1
8. 使用監聽器的跟蹤信息
(*) 監聽器參數配置
(*) 開啟跟蹤
[oracle@oracledemo ~]$ lsnrctl LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 09-JUL-2018 15:18:45 Copyright (c) 1991, 2009, Oracle. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> show The following operations are available after show An asterisk (*) denotes a modifier or extended command: rawmode displaymode rules trc_file 使用trace文件來記錄跟蹤信息 trc_directory trc_level 跟蹤的級別 log_file log_directory 跟蹤文件保存的目錄 log_status current_listener inbound_connect_timeout startup_waittime snmp_visible save_config_on_stop dynamic_registration enable_global_dynamic_endpoint oracle_home pid使用show命令查看每個參數
LSNRCTL> show trc_file Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledemo)(PORT=1521))) LISTENER parameter "trc_file" set to ora_8267_3086763712.trc ####對應的文件 The command completed successfullyLSNRCTL> show trc_level Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledemo)(PORT=1521))) LISTENER parameter "trc_level" set to off ##級別 The command completed successfullyLSNRCTL> show log_directory Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledemo)(PORT=1521))) LISTENER parameter "log_directory" set to /u01/app/oracle/diag/tnslsnr/oracledemo/listener/alert ###保存的目錄 The command completed successfully [oracle@oracledemo ~]$ cd /u01/app/oracle/diag/tnslsnr/oracledemo/listener/alert [oracle@oracledemo alert]$ ls log.xml使用trace命令來開啟監聽器的跟蹤
LSNRCTL> help trace trace OFF | USER | ADMIN | SUPPORT [<listener_name>] : set tracing to the specified level 參數: off: 關閉監聽器的跟蹤,對應數字0 USER: 開啟用戶級別的跟蹤,對應數字4 ADMIN: 開啟管理級別的跟蹤,對應數字10 SUPPORT: 開啟ORACLE監聽器所支持的跟蹤信息,對應數字16 一般:設置成support(或者16),記錄所有的支持的跟蹤信息 LSNRCTL> trace support Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracledemo)(PORT=1521))) Opened trace file: /u01/app/oracle/diag/tnslsnr/oracledemo/listener/trace/ora_8267_3086763712.trc 生成一個跟蹤文件 The command completed successfully [oracle@oracledemo ~]$ ls /u01/app/oracle/diag/tnslsnr/oracledemo/listener/trace listener.log ora_8267_3086763712.trc ora_8267_3086763712.trm使用tracasst命令格式化監聽器的跟蹤文件
Usage : trcasst [options] <filename> #還可以加轉向輸出符> [oracle@oracledemo trace]$ trcasst -la ora_8267_3086763712.trc > ~/b.txt 參數:-s Statistics 顯示監聽器的統計信息 [oracle@oracledemo trace]$ trcasst -s ora_8267_3086763712.trc 比較常用的參數Trace Assistant Utility: Version 11.2.0.1.0 Production on July 9, 2018 3:49:12 PMCopyright (c) 2001, 2009, Oracle. All rights reserved.************************************************************************** Trace Assistant **************************************************************************---------------------- Trace File Statistics: ---------------------- Start Timestamp : 018-07-09 15:43:27.055475 End Timestamp : 018-07-09 15:48:57.022934 Total number of Sessions: 2DATABASE:Operation Count: 0 OPENS, 0 PARSES, 0 EXECUTES, 0 FETCHESORACLE NET SERVICES:Total Calls : 12 sent, 11 received, 0 ociTotal Bytes : 2059 sent, 3602 receivedAverage Bytes: 171 sent per packet, 327 received per packetMaximum Bytes: 178 sent, 350 receivedGrand Total Packets: 12 sent, 11 received************************************************************************** Trace Assistant has completed **************************************************************************-e[0|1|2] Error information, default is 0 監聽器中的錯誤信息[oracle@oracledemo trace]$ trcasst -e1 ora_8267_3086763712.trc 顯示所有錯誤信息-l[a|i <connection_id>] Connection information 列出所有的連接[oracle@oracledemo trace]$ trcasst -la ora_8267_3086763712.trc Connection ID: 2 每個代表數據庫的連接Socket Id: 12Operation: ReceiveMultiplex: OFFConnect Data: Connection ID: 1Operation: ReceiveMultiplex: OFFConnect Data:
轉載于:https://www.cnblogs.com/reid21/articles/9814798.html
總結
以上是生活随笔為你收集整理的六、配置Oracle数据库的网络环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu 2005 第几天?(c语言)
- 下一篇: BZOJ2208 [Jsoi20