一、連接
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數據庫名(DB_NAME)、實例名(INSTANCE_NAME)、服務名(SERVICE_NAME)
遇到過的問題
問題1:ip無法訪問數據庫,localhost可以
解決:監聽文件listener.ora中DESCRIPTION_LIST裏面HOST=localhost改爲HOST=主機名,然後重啓監聽服務即可