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命令使用截图:
oracle连接与配置(命令、jdbc等方式),以及数据库实例名与SERVICE_NAME的区别_第1张图片
注: tnsping命令:如果能够ping通,则说明客户端能解析listener的机器名,而且listener也已经启动,但是并不能说明数据库已经打开,而且tsnping的过程与真正客户端连接的过程也不一致。但是如果不能用tnsping通,则肯定连接不到数据库。

3、jdbc的三种连接方式:

jdbc:oracle:thin:@//:/
jdbc:oracle:thin:@::
jdbc:oracle:thin:@
示例:
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=主机名,然后重启监听服务即可

你可能感兴趣的:(oracle连接与配置(命令、jdbc等方式),以及数据库实例名与SERVICE_NAME的区别)