初識oracle 11g sqlnet.ora

wisdomone1發表於2015-09-17

背景:

      前幾個月前,在某客戶出差,由於對sqlnet.ora的含義及相關引數不熟悉,導致操作花費更多時間,
最近在某客戶又接觸多次與此相關的問題,所以決定了解下這塊知識,以免影響後期工作。

結論:
1,sqlnet.ora檔案可以同時在伺服器或客戶端配置或僅在一處配置皆可
2,sqlnet.ora引數分為3類,分別為用於profile,用於adr,用於非adr
3,sqlnet.ora引數內容又可分為面向資料庫伺服器,或而向客戶端或其它
4,服務端端的sqlnet.ora引數變更,必須要重啟監聽方可生效,切切記記
5,log字首的引數記錄的TRC檔案內容會包含trace字首生成的trc檔案
6,tnsping字首的引數記錄或診斷tnsping行為產生一些故障
7,同時也要注意某些引數必須要同時配置方可生效,細節請參考官方手冊(見最末引用資料)

測試:

1,sqlnet.ora檔案的含義:
         它可以在資料庫伺服器及客戶端進行配置
         此檔案主要配置一些限制工作環境的引數

 2,sqlnet.ora可以達到一些作用:
       1,指定客戶端域新增到不統一的名稱
       2,可以優先指定某些命名方法
       3,控制是否開啟記錄日誌及跟蹤功能
       4,指定透過特定程式路由客戶端會話連線
       5,為外部命名方法配置引數
       6,配置高階ORACLE安全特性
       7,指定或控制某些特定的通訊協議可以訪問資料庫

 3,sqlnet.ora配置儲存目錄在$ORACLE_HOME/network/admin
       當然也可以存放在環境變數TNS_ADMIN指定的目錄下

 4,sqlnet.ora裡面的引數按用途分成3類:


   profile引數
         


adr引數

非adr引數

5,下面我們摘錄上述3類中幾個引數進行測試,其它引數,到時在工作用到再具體學習


   profile方面的引數
6,sqlnet.expire_time指定多久檢查客戶端連線是否仍然活動,如不活動,會傳送一條錯誤資訊給客戶端
   單位為分鐘
[oracle@langfang admin]$ more sqlnet.ora
sqlnet.allowed_login_versions=11
sqlnet.expire_time=1

此引數一些注意之處:
       1,如果配置此引數大於0,如果某會話因為異常中斷,資料庫不會讓其會話一直持續開啟佔用資源,即會PMON清理
       2,如果檢查發現某此客戶端會話因為異常中斷,會話已經INACTIVE,則返回一個錯誤,並且清理這個死掉的程式
       3,此引數主要用於資料庫伺服器,因為它要處理很多客戶端連線
       4,此引數一些限制 
            在bequeathed connections不支援此引數配置
            雖然此引數影響不是很小,但是還是會影響網路效能,因為要定期發檢查包到資料庫伺服器
            和具體的作業系統也有關係,資料庫伺服器要區分這種網路檢查包的事件和其它的事件,因此會影響網路效能
       5,此引數預設值為0,建議配置為10分鐘

7,tcp.connect_timeout指定客戶端到資料庫的TCP連線多久在即定的時間內,否則超時即會報錯
ORA-12170: TNS:Connect timeout occurred error.
此引數單位為秒,預設為60秒

[oracle@langfang admin]$ more sqlnet.ora
sqlnet.allowed_login_versions=11
sqlnet.expire_time=1
tcp.connect_timeout=1

8,tcp.excluded_nodes指定哪些客戶端不能連線到資料庫
此引數必須和引數validnode_checking=yes在一起才能生效
tcp.excluded_nodes=(10.0.0.6)
tcp.validnode_checking=yes

此引數語法形式為
tcp.excluded_nodes=(hostname,ip,..)
而且ip地址可以以模糊匹配方式指定,如10.2.*(代表10.2字首所有的IP地址)

修改此引數,不能馬上生效,必須重啟監聽方可
客戶端會報錯ora-12547或者ora-12537


9,tcp.invidated_nodes和上述tcp.excluded_nodes意思相反,但前者優先順序高於高者
[oracle@langfang admin]$ lsnrctl

LSNRCTL> start
Starting /oracle/product/11.2.0/db_1/bin/tnslsnr: please wait...



如果同時配置上述2個引數,監聽啟動會報錯,但是監聽程式會啟動
tcp.excluded_nodes=(10.0.0.6)
tcp.validnode_checking=yes
tcp.invited_nodes=(10.0.0.6)


LSNRCTL> start
Starting /oracle/product/11.2.0/db_1/bin/tnslsnr: please wait...

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.3)(PORT=1521)))
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
Linux Error: 104: Connection reset by peer

listener日誌不大,可見不是監聽日誌檔案太大導致的
[oracle@langfang log]$ ll -lh /oracle/diag/tnslsnr/langfang/listener/alert/log.xml
-rw-r-----. 1 oracle oinstall 1014K Sep 17 00:16 /oracle/diag/tnslsnr/langfang/listener/alert/log.xml

再嘗試lsrnctl start啟動監聽,同時檢視監聽日誌,發現資料庫伺服器直接拒絕本地IP的請求
<msg time='2015-09-17T00:23:49.536+08:00' org_id='oracle' comp_id='tnslsnr'
type='UNKNOWN' level='16' host_id='langfang'
host_addr='10.0.0.3'>
<txt>TNS-12546: TNS:permission denied
TNS-12560: TNS:protocol adapter error
TNS-00516: Permission denied
Linux Error: 2: No such file or directory
</txt>
</msg>
<msg time='2015-09-17T00:24:49.574+08:00' org_id='oracle' comp_id='tnslsnr'
type='UNKNOWN' level='16' host_id='langfang'
host_addr='10.0.0.3'>
<txt>Incoming connection from 10.0.0.3 rejected
</txt>
</msg>

我猜想tcp.invidated_nodes如果指定某些IP,則不屬於這些IP的客戶端全不能連線到資料庫
所以才報上面的錯誤
[oracle@langfang admin]$ more sqlnet.ora
sqlnet.allowed_login_versions=11
sqlnet.expire_time=1
tcp.connect_timeout=1
#tcp.excluded_nodes=(10.0.0.6)
tcp.invited_nodes=(10.0.0.3) —相當於除了這個指定的IP,其它IP全不能連線到資料庫
tcp.validnode_checking=yes

監聽啟動成功
[oracle@langfang admin]$ lsnrctl start

10,tnsping.trace_level
     tnsping.trace_level的可取值為
    
    off  (此為預設值)

Values
  • off for no trace output  —關閉TRACE功能

  • user for user trace information  —輸出使用者跟蹤資訊

  • admin for administration trace information —輸出管理員跟蹤資訊

  • support for Oracle Support Services trace information —這個最高階,輸出用於提供給ORACLE支援原廠的跟蹤資訊

11,tnsping.trace_directory預設的TRC目錄為ORACLE_HOME/network/trace,或者你自行指定
    指定tnsping行為如何產生TRC檔案,二者必須同時配置方可生效

tnsping.trace_directory=/home/oracle/tns_trace
tnsping.trace_level=user

tnsping.trc檔案內容暫從略
[oracle@langfang tns_trace]$ ll
total 4
-rw-r-----. 1 oracle oinstall 1720 Sep 17 00:35 tnsping.trc


   與adr診斷相關的引數

12,adr一些含義:
    adr始於oracle 11g,它會把每次資料庫故障的一些資訊寫入到ADR中,它是一種機制,便於收集TRC檔案及診斷分析
    adr預設是開啟的
    如果adr啟用了,在sqlnet中會忽略非adr的引數

adr預設目錄在oracle_base/diag目錄


13,adr_base指定adr的基目錄,預設為oracle_base,如果未指定oracle_base,則為oracle_home/log


14,diag_adr_enabled指定是否開啟adr,預設是on表示開啟,否則為off表示關閉

15,trace_directory_client指定在客戶端哪個目錄生成跟蹤檔案

16,trace_timestamp_client,指定是否在跟蹤檔案中新增時間戳標識,便於區分檔案,預設值為true,可取值為true及false

17,跟蹤客戶端到資料庫的連線,用於診斷客戶端連線資料庫出現故障

trace_level_client=user,診斷資訊的級別,預設值為off或0,可取值有4個
  • off for no trace output  —關閉TRACE功能

  • user for user trace information  —輸出使用者跟蹤資訊

  • admin for administration trace information —輸出管理員跟蹤資訊

  • support for Oracle Support Services trace information —這個最高階,輸出用於提供給ORACLE支援原廠的跟蹤資訊

18,新增上述15到17幾個引數到客戶端的sqlnet.ora(此檔案路徑為$ORACLE_HOME/NETWORK/admin)中,預設生成的跟蹤檔案為cli.trc
trace_level_client=user
trace_timestamp_client=true
trace_directory_client=D:\oracle\product\10.2.0\client_1\NETWORK\trace

      如果新增引數
trace_timestamp_client=false
生成的TRC檔案中不會包含時間戳標識



19,trace_filelen_client指定cli.trc跟蹤檔案的大小,單位為K,超過大小即寫入新的檔案
20,trace_fileno_client指定跟蹤檔案的字首編號最大為多少,如產生的檔案數量超過此個數,重新編號
 
與非adr診斷相關的引數
21,diag_adr_enabled指定是否開啟adr,可取值為on或off,預設為on


22,log_directory_client指定生成的SQLNET.LOG的目錄

23,log_file_client指定生成的sqlnet.log的名稱,預設為sqlnet.log,也可以重指定名稱
   (注意:sqlnet.log只會記錄不能正常連線到ORACLE資料庫的客戶端連線,正常連線不會記錄的)

24,補充,由log_directory_clients相關引數生成的sqlnet.log會包含trace_字首相關生成的trc跟蹤檔案
        即前者包含後者,後者僅是針對客戶端一次連線進行跟蹤,而前者是把客戶端所有行為記錄下來

25,要跟蹤資料庫伺服器端的sql net會話連線,diag_adr_enabled必須配置為false

  引數含義和client端相同,不再複述
26,trace_level_server=user
27,trace_directory_server=/home/oracle/log_server
28,trace_file_server=server.trc
29,trace_filelen_server=1
30,trace_fileno_server=5


31,配置資料庫服務端器的sqlnet.log生效(碰到一個怪問題,有時會生成sqlnet.log,有時不會記錄在11.2.0.4 db)
log_directory_server指定儲存sqlnet.log的目錄
log_file_server指定sqlnet.log檔名


參考資料:
Oracle? Database Net Services Reference
11g Release 2 (11.2)

個人簡介


8年oracle從業經驗,具備豐富的oracle技能,目前在國內北京某專業oracle服務公司從事高階技術顧問。
服務過的客戶:
中國電信
中國移動
中國聯通
中國電通
國家電網
四川達州商業銀行
湖南老百姓大藥房
山西省公安廳
中國郵政
北京302醫院     
河北廊坊新奧集團公司

 專案經驗:
中國電信3G專案AAA系統資料庫部署及最佳化
      中國聯通4G資料庫效能分析與最佳化
中國聯通CRM資料庫效能最佳化
中國移動10086電商平臺資料庫部署及最佳化
湖南老百姓大藥房ERR資料庫sql最佳化專案
四川達州商業銀行TCBS核心業務系統資料庫模型設計和RAC部署及最佳化
四川達州商業銀行TCBS核心業務系統後端批處理儲存過程功能模組編寫及最佳化
北京高鐵訊號監控系統RAC資料庫部署及最佳化
河南宇通客車資料庫效能最佳化
中國電信電商平臺核心採購模組表模型設計及最佳化
中國郵政儲蓄系統資料庫效能最佳化及sql最佳化
北京302醫院資料庫遷移實施
河北廊坊新奧data guard部署及最佳化
山西公安廳身份證審計資料庫系統故障評估
國家電網上海災備專案4 node rac+adg 
       貴州移動crm及客服資料庫效能最佳化專案
       貴州移動crm及客服務資料庫sql稽核專案
       深圳穆迪軟體有限公司資料庫效能最佳化專案

聯絡方式:
手機:18201115468
qq   :   305076427
qq微博: wisdomone1
新浪微博:wisdomone9
qq群:275813900    
itpub部落格名稱:wisdomone1    http://blog.itpub.net/9240380/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-1802286/,如需轉載,請註明出處,否則將追究法律責任。