Service_name:该参数是由oracle8i引进的。在8i以前,使用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中 1、一个数据库对应多个实例: 这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例, 而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。 sid是数据库实例的名字,每个实例各不相同。 2、一个数据库可以对应多个Service_name 以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service name 必须与SID一样。

1.SID

是用来标识这个数据库内部每个实例的名字(一个数据库可以有多个实例(如RAC))

  1. 给程序开发连接用,比如连接串: jdbc:oracle:thin:@//10.121.51.22:1521:sidname
  2. //注意是:sidname,不是/sidname
  3. // linux下登录演示
  4. [root@shdb02 ~]# su - oracle
  5. //输出当前默认的实例sid
  6. [oracle@shdb02 ~]$ echo $ORACLE_SID
  7. htsby2
  8. //设置当前要登录的实例sid
  9. [oracle@shdb02 ~]$ export ORACLE_SID=fpm2
  10. //输出当前的实例sid
  11. [oracle@shdb02 ~]$ echo $ORACLE_SID
  12. fpm2
  13. [oracle@shdb02 ~]$ sqlplus / as sysdba
  14. SQL*Plus: Release 11.2.0.4.0 Production on Mon Mar 14 11:05:37 2022
  15. Copyright (c) 1982, 2013, Oracle. All rights reserved.
  16. Connected to:
  17. Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
  18. With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
  19. Data Mining and Real Application Testing options
  20. //查询当前实例的数据库(数据库对应多个实例)
  21. SQL> select name from v$database;
  22. NAME
  23. ---------
  24. FPM
  25. //查询当前登录的实例sid
  26. SQL> select instance_name from v$instance;
  27. INSTANCE_NAME
  28. ----------------
  29. fpm2
  30. //查询实例的相关参数
  31. SQL> show parameter instance
  32. NAME TYPE VALUE
  33. ------------------------------------ ----------- ------------------------------
  34. active_instance_count integer
  35. cluster_database_instances integer 2
  36. instance_groups string
  37. instance_name string fpm2
  38. instance_number integer 2
  39. instance_type string RDBMS
  40. open_links_per_instance integer 4
  41. parallel_instance_group string
  42. parallel_server_instances integer 2

2.SERVICE_NAME

是这个数据库对外的名称,外面的人要想连接我这个数据库,你就在客户端的连接串里写上service_name

  1. 一般给客户端pl/sql用,举例: username@10.128.51.22:1521/fpm
  2. //注意是 /fpm 而不是:fpm
  3. //实例验证
  4. [root@shdb02 ~]# su - oracle
  5. [oracle@shdb02 ~]$ export ORACLE_SID=fpm2 //fpm2是实例sid
  6. [oracle@shdb02 ~]$ sqlplus / as sysdba
  7. SQL*Plus: Release 11.2.0.4.0 Production on Thu Mar 10 22:43:36 2022
  8. Copyright (c) 1982, 2013, Oracle. All rights reserved.
  9. Connected to:
  10. Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
  11. With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
  12. Data Mining and Real Application Testing options
  13. //查询该实例的数据库名,数据库和实例是一对多的关系,也就是1个数据库对应多个实例。
  14. SQL> select name from v$database;
  15. NAME
  16. ---------
  17. FPM
  18. //查看当前的实例sid
  19. SQL> select instance_name from v$instance;
  20. INSTANCE_NAME
  21. ----------------
  22. fpm2
  23. //查询当前的数据库服务名
  24. SQL> show parameter service_name;
  25. NAME TYPE VALUE
  26. ------------------------------------ ----------- ------------------------------
  27. service_names string fpm

3.Java JDBC Thin Driver 连接 Oracle有三种方法

  1. 1、格式一: JDBC 使用服务名 ServiceName: jdbc:oracle:thin:@//<host>:<port>/<service_name>
  2. Example: jdbc:oracle:thin:@//192.168.2.1:1521/my_service_name
  3. 注意这里的格式,@后面有//, 这是与使用SID的主要区别。
  4. 这种格式是Oracle 推荐的格式,因为对于oracle集群来说,每个节点的SID 是不一样的,但是SERVICE_NAME 确可以包含所有节点。
  5. 2、格式二: JDBC 使用实例 SID: jdbc:oracle:thin:@<host>:<port>:<SID>
  6. 例子:jdbc:oracle:thin:@//10.121.51.22:1521:my_sid
  7. 格式三:Oracle JDBC 使用 TNSName:
  8. jdbc:oracle:thin:@<TNSName>
  9. Example: jdbc:oracle:thin:@tna
  10. 特别要注意 /和:的问题,对于12来说

4.查询数据库名

[root@shdb02 ~]# su - oracle
[oracle@shdb02 ~]$ export ORACLE_SID=fpm2  //fpm2是实例名
[oracle@shdb02 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Thu Mar 10 22:43:36 2022
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
//查询该实例的数据库名,数据库和实例是一对多的关系,也就是1个数据库对应多个实例。
SQL> select name from v$database; 
  NAME 
--------- 
  FPM
SQL> select instance_name from v$instance;  
 INSTANCE_NAME
 ----------------
 fpm2
//查询当前的数据库服务名 
 SQL> show parameter service_name;   

 NAME TYPE VALUE
 ------------------------------------ ----------- ------------------------------
 service_names    string    fpm

5.补充命令

数据库名db_name
SELECT * FROM V$DATABASE;
SELECT t.NAME FROM V$DATABASE t;

实例名
SELECT * FROM V$INSTANCE;
SELECT t.INSTANCE_NAME FROM V$INSTANCE t;

SID
select * from v$thread;
select t.INSTANCE from v$thread t;

域名db_domain
select * from v$parameter t where t.name = 'db_domain';
select t.VALUE from v$parameter t where t.name = 'db_domain';

服务名
select * from v$parameter t where t.name = 'service_names';
select t.VALUE from v$parameter t where t.name = 'service_names';