<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-28  評論-15  文章-81  trackbacks-0
    以下內容來之Internet,不知道原作者是哪位了,非常感謝作者的總結。

    版權歸原作者。
    ====================
    最近看到好多人說到tns或者數據庫不能登錄等問題,就索性總結了下面的文檔。
      
      首先來說Oracle的網絡結構,往復雜處說能加上加密、LDAP等等。。這里不做討論,重點放在基本的網絡結構也就是我們最常用的這種情況
      
      三個配置文件
      
      listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME\network\admin目錄下。
      
      重點:三個文件的作用和使用
      
      #-----------------------
      
      sqlnet.ora-----作用類似于linux或者其他unix的nsswitch.conf文件,通過這個文件來決定怎么樣找一個連接中出現的連接字符串,
      
      例如我們客戶端輸入
      
      sqlplus sys/oracle@orcl
      
      假如我的sqlnet.ora是下面這個樣子
      
      SQLNET.AUTHENTICATION_SERVICES= (NTS)
      
      NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
      
      那么,客戶端就會首先在tnsnames.ora文件中找orcl的記錄.如果沒有相應的記錄則嘗試把orcl當作一個主機名,通過網絡的途徑去解析它的ip地址然后去連接這個ip上GLOBAL_DBNAME=orcl這個實例,當然我這里orcl并不是一個主機名
      
      如果我是這個樣子
      
      NAMES.DIRECTORY_PATH= (TNSNAMES)
      
      那么客戶端就只會從tnsnames.ora查找orcl的記錄
      
      括號中還有其他選項,如LDAP等并不常用。
      
      #------------------------
      
      Tnsnames.ora------這個文件類似于unix 的hosts文件,提供的tnsname到主機名或者ip的對應,只有當sqlnet.ora中類似
      
      NAMES.DIRECTORY_PATH= (TNSNAMES) 這樣,也就是客戶端解析連接字符串的順序中有TNSNAMES是,才會嘗試使用這個文件。
      
      例子中有兩個,ORCL 對應的本機,SALES對應的另外一個IP地址,里邊還定義了使用主用服務器還是共享服務器模式進行連接,一句一句說
      
      #你所要連接的時候輸入得TNSNAME
      
      ORCL =
      
      (DESCRIPTION =
      
      (ADDRESS_LIST =
      
      #下面是這個TNSNAME對應的主機,端口,協議
      
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
      
      )
      
      (CONNECT_DATA =
      
      #使用專用服務器模式去連接需要跟服務器的模式匹配,如果沒有就根據服務器的模式
      
      #自動調節
      
      (SERVER = DEDICATED)
      
      #對應service_name,SQLPLUS>show parameter service_name;
      
      #進行查看
      
      (SERVICE_NAME = orcl)
      
      )
      
      )
      
      #下面這個類似
      
      SALES =
      
      (DESCRIPTION =
      
      (ADDRESS_LIST =
      
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521))
      
      )
      
      (CONNECT_DATA =
      
      (SERVER = DEDICATED)
      
      (SERVICE_NAME = sales)
      
      )
      
      )
      
      #----------------------
      
      客戶端完了我們來看服務器端
      
      listener.ora------listener監聽器進程的配置文件
      
      關于listener進程就不多說了,接受遠程對數據庫的接入申請并轉交給oracle的服務器進程。所以如果不是使用的遠程的連接,listener進程就不是必需的,同樣的如果關閉listener進程并不會影響已經存在的數據庫連接。
      
      Listener.ora文件的例子
      
      #listener.ora Network Configuration File: #E:\oracle\product\10.1.0\Db_2\NETWORK\ADMIN\listener.ora
      
      # Generated by Oracle configuration tools.
      
      #下面定義LISTENER進程為哪個實例提供服務
      
      #這里是ORCL,并且它對應的ORACLE_HOME和GLOBAL_DBNAME
      
      #其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做數據庫連接
      
      SID_LIST_LISTENER =
      
      (SID_LIST =
      
      (SID_DESC =
      
      (GLOBAL_DBNAME = boway)
      
      (ORACLE_HOME = E:\oracle\product\10.1.0\Db_2)
      
      (SID_NAME = ORCL)
      
      )
      
      )
      
      #監聽器的名字,一臺數據庫可以有不止一個監聽器
      
      #再向下面是監聽器監聽的協議,ip,端口等,這里使用的tcp1521端口,并且使#用的是主機名
      
      LISTENER =
      
      (DESCRIPTION =
      
      (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))
      
      )
      
      上面的例子是一個最簡單的例子,但也是最普遍的。一個listener進程為一個instance(SID)提供服務。
      
      監聽器的操作命令
      
      $ORACLE_HOME/bin/lsnrctl start,其他諸如stop,status等。具體敲完一個lsnrctl后看幫助。
      
      上面說到的三個文件都可以通過圖形的配置工具來完成配置
      
      $ORACLE_HOME/netca 向導形式的
      
      $ORACLE_HOME/netmgr
      
      本人比較習慣netmgr,
      
      profile 配置的是sqlnet.ora也就是名稱解析的方式
      
      service name 配置的是tnsnames.ora文件
      
      listeners配置的是listener.ora文件,即監聽器進程
      
      具體的配置可以嘗試一下然后來看一下配置文件。
      
      這樣一來總體結構就有了,是當你輸入sqlplus sys/oracle@orcl的時候
      
      1. 查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME
      
      2. 則查詢tnsnames.ora文件,從里邊找orcl的記錄,并且找到主機名,端口和service_name
      
      3. 如果listener進程沒有問題的話,建立與listener進程的連接。
      
      4. 根據不同的服務器模式如專用服務器模式或者共享服務器模式,listener采取接下去的動作。默認是專用服務器模式,沒有問題的話客戶端就連接上了數據庫的server process。
      
      5. 這時候網絡連接已經建立,listener進程的歷史使命也就完成了。

    #---------------
      
      幾種連接用到的命令形式
      
      1.sqlplus / as sysdba 這是典型的操作系統認證,不需要listener進程
      
      2.sqlplus sys/oracle 這種連接方式只能連接本機數據庫,同樣不需要listener進程
      
      3.sqlplus sys/oracle@orcl 這種方式需要listener進程處于可用狀態。最普遍的通過網絡連接。
      
      以上連接方式使用sys用戶或者其他通過密碼文件驗證的用戶都不需要數據庫處于可用狀態,操作系統認證也不需要數據庫可用,普通用戶因為是數據庫認證,所以數據庫必需處于open狀態。
      
      然后就是
      
      #-------------
      
      平時排錯可能會用到的
      
      1.lsnrctl status查看服務器端listener進程的狀態
      
      LSNRCTL> help
      
      The following operations are available
      
      An asterisk (*) denotes a modifier or extended command:
      
      start stop status
      
      services version reload
      
      save_config trace change_password
      
      quit exit set*
      
      show*
      
      LSNRCTL> status
      
      2.tnsping 查看客戶端sqlnet.ora和tnsname.ora文件的配置正確與否,及對應的服務器的listener進程的狀態。
      
      C:\>tnsping orcl
      
      TNS Ping Utility for 32-bit Windows: Version 10.1.0.2.0 - Production on 16-8月 -
      
      2005 09:36:08
      
      Copyright (c) 1997, 2003, Oracle. All rights reserved.
      
      Used parameter files:
      
      E:\oracle\product\10.1.0\Db_2\network\admin\sqlnet.ora
      
      Used TNSNAMES adapter to resolve the alias
      
      Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
      
      (HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_
      
      NAME = orcl)))
      
      OK (20 msec)
      
      3.
      
      SQL>show sga 查看instance是否已經啟動
      
      SQL> select open_mode from v$database; 查看數據庫是打開還是mount狀態。
      
      OPEN_MODE
      
      ----------
      
      READ WRITE
      
      #-----------------
      
      使用hostname訪問數據庫而不是tnsname的例子
      
      使用tnsname訪問數據庫是默認的方式,但是也帶來點問題,那就是客戶端都是需要配置tnsnames.ora文件的。如果你的數據庫服務器地址發生改變,就需要重新編輯客戶端這個文件。通過hostname訪問數據庫就沒有了這個麻煩。
      
      需要修改
      
      服務器端listener.ora
      
      #監聽器的配置文件listener.ora
      
      #使用host naming則不再需要tnsname.ora文件做本地解析
      
      # listener.ora Network Configuration File: d:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\listener.ora
      
      # Generated by Oracle configuration tools.
      
      SID_LIST_LISTENER =
      
      (SID_LIST =
      
      (SID_DESC =
      
      # (SID_NAME = PLSExtProc)
      
      (SID_NAME = orcl)
      
      (GLOBAL_DBNAME = boway)
      
      (ORACLE_HOME = d:\oracle\product\10.1.0\db_1)
      
      # (PROGRAM = extproc)
      
      )
      
      )
      
      LISTENER =
      
      (DESCRIPTION_LIST =
      
      (DESCRIPTION =
      
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
      
      )
      
      (DESCRIPTION =
      
      (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))
      
      )
      
      )
      
      客戶端sqlnet.ora 如果確認不會使用TNSNAME訪問的話,可以去掉TNSNAMES
      
      # sqlnet.ora Network Configuration File: d:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\sqlnet.ora
      
      # Generated by Oracle configuration tools.
      
      SQLNET.AUTHENTICATION_SERVICES= (NTS)
      
      NAMES.DIRECTORY_PATH= (HOSTNAME)
      
      Tnsnames.ora文件不需要配置,刪除也無所謂。
      
      下面就是網絡和操作系統的配置問題了,怎么樣能夠解析我的主機名的問題了
      
      可以通過下面的方式連接
      
      sqlplus sys/oracle@boway
      
      這樣的話,會連接boway這臺服務器,并且listener來確定你所要連接的service_name。
    posted on 2008-01-10 22:58 譚明 閱讀(1419) 評論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 日本不卡视频免费| 成人黄页网站免费观看大全| 亚洲第一福利网站在线观看| 午夜亚洲国产精品福利| 国产福利免费观看| 一级毛片成人免费看a| 亚洲自偷自偷在线制服| 一区二区三区无码视频免费福利| 亚洲国产成人一区二区三区| 最近免费中文字幕高清大全| 亚洲成a人片7777| 四虎影院在线免费播放| 一级毛片正片免费视频手机看| 亚洲高清国产拍精品青青草原| 一个人看的www视频免费在线观看| 亚洲色中文字幕无码AV| 99久久人妻精品免费一区| 亚洲人成777在线播放| 午夜视频在线观看免费完整版| 美女被免费网站视频在线| 亚洲最大激情中文字幕| 久久国产高潮流白浆免费观看| 日韩亚洲不卡在线视频中文字幕在线观看| 日产乱码一卡二卡三免费| 国产免费人成视频在线播放播| 亚洲伦理一区二区| 午夜免费福利在线| 中国国产高清免费av片| 亚洲国产成人久久77| 亚洲国产专区一区| 99热在线免费播放| 精品韩国亚洲av无码不卡区| 亚洲人成亚洲人成在线观看| 好先生在线观看免费播放| 午夜免费国产体验区免费的 | 国产精品视频免费| 黄页网址大全免费观看12网站| 亚洲∧v久久久无码精品| 国内自产拍自a免费毛片| 美女被cao网站免费看在线看| 亚洲真人无码永久在线观看|