oracle連接與配置(命令、jdbc等方式),以及數據庫實例名與SERVICE_NAME的區別

一、連接

1、sqlplus命令連接
sqlplus usr/pwd@//host:port/service_name

①.本地登錄 sqlplus / as sysdba

②.賬號密碼登錄 sqlplus user/passwd

③.選擇TNSName登錄 sqlplus user/passwd@TNSName 例如 sqlplus user/passwd@ORCL_DEMO    注:ORCL_DEMO在tnsnames.ora中配置

④.連接遠程數據 sqlplus user/passwd@IP:端口/service_name例如:sqlplus user/[email protected]:1521/orcl

⑤.遠程登錄dba sqlplus user/passwd@IP:端口/service_name as sysdba 例如:sqlplus user/[email protected]:1521/orcl as sysdba

連接過程中遇到問題:遠程登錄as sysdba通常會報錯 ,對該問題首要考慮就是1:口令文件的缺失,造成沒有找到口令、2:REMOTE_LOGIN_PASSWORDFILE值沒有指定或是指定了none。3、檢查sqlnet.ora的 SQLNET.AUTHENTICATION_SERVICES=()配置。
具體遇到報錯和解決辦法如下:
1、報錯:ORA-12638: 身份證明檢索失敗  
sqlnet.ora中修改: SQLNET.AUTHENTICATION_SERVICES= (NONE) 
注意:NTS(本地操作系統認證),改爲NONE(口令文件方式認證),本地執行 sqlplus / as sysdba 時可能會報錯: ORA-01031: insufficient privileges
2、報錯:ORA-01031: insufficient privileges
SQL>select * from v$pwfile_users;
查不到時,說明缺少口令文件,執行下面命令
orapwd file=D:\app\xxx\product\11.2.0\dbhome_1\database\PWDorcl.ora entries=15 password=syspassword force=y
SQL>grant sysdba to myuser;//把sysdba 授權給要遠程登錄的用戶
3、SQL>show parameter remote_login_password name type value
如果查到值不爲EXCLUSIVE ,執行下面命令
SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;

其他命令:
撤銷角色:revoke sysdba from myuser

2、tnsping 測試數據庫服務:

命令格式:
tnsping  IP地址:端口號/數據庫服務名 [count]
tnsping  網絡服務名 [count]
eg:
tnsping localhost:1521/orcl 
tnsping orcldb

tnsping命令使用截圖:
在這裏插入圖片描述
注: tnsping命令:如果能夠ping通,則說明客戶端能解析listener的機器名,而且listener也已經啓動,但是並不能說明數據庫已經打開,而且tsnping的過程與真正客戶端連接的過程也不一致。但是如果不能用tnsping通,則肯定連接不到數據庫。

3、jdbc的三種連接方式:

jdbc:oracle:thin:@//<host>:<port>/<service_name>
jdbc:oracle:thin:@<host>:<port>:<SID>
jdbc:oracle:thin:@<TNSName>
示例:
url=jdbc:oracle:thin:@//PCNAME:1521/orcl.localdomain
url=jdbc:oracle:thin:@PCNAME:1521:orcl
url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=PCNAME)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl.localdomain)))
個人更推薦第一種方式

二、tnsnames.ora配置

ORCL_DEMO =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost/ip/主機名)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl.localdomain)
    )
  )
  簡單說明:
  ORCL_DEMO 即連接描述符名
  HOST = 服務器IP,也可以是localhost或者主機名
 SERVICE_NAME  即 Global Database Name,通常爲name.domain

三、SID與SERVICE_NAME區別

SID是實例名,實例名指的是用於響應某個數據庫操作的數據庫管理系統的名稱。實例名是由初始化參數文件的參數instance_name決定的。如果這個參數不被指定(即instance_name沒有被指定爲任何值),那麼實例的名字由該用戶的環境變量ORACLE_SID(注意這裏是大寫)決定。在windows平臺下,則是註冊表中oracle_sid值決定。
注意:數據庫實例名與ORACLE_SID雖然兩者都表是oracle實例,但兩者是有區別的。instance_name是oracle數據庫參數。而ORACLE_SID是操作系統的環境變量。 ORACLD_SID用於與操作系統交互,也就是說,從操作系統的角度訪問實例名,必須通過ORACLE_SID。在winnt不 臺,ORACLE_SID還需存在於註冊表中。
且ORACLE_SID必須與instance_name的值一致,否則,你將會收到一個錯誤,在unix平臺,是“ORACLE not available”,在winnt平臺,是“TNS:協議適配器錯誤”。

SERVICE_NAME指的是listener中的全局數據庫名:這個名字是由listener.ora中GLOBAL_DBNAME參數決定的。這個名字代表的是客戶端連接到數據庫時,tnsnames.ora中SERVICE_NAME參數所對應的值。

oracle 實例名和服務名以及數據庫名區別

Oracle數據庫名(DB_NAME)、實例名(INSTANCE_NAME)、服務名(SERVICE_NAME)

Oracle Sqlplus命令登錄的幾種方式

遇到過的問題

問題1:ip無法訪問數據庫,localhost可以
解決:監聽文件listener.ora中DESCRIPTION_LIST裏面HOST=localhost改爲HOST=主機名,然後重啓監聽服務即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章