我想为我的 JDBC连接形成oracle数据库URL,很少有网站说SID
应该是网址的一部分而很少说模式名称。
请比较 ORACLE 中的schema, service name and SID
?它们是如何相关的?
是SID:schema
是1:n
,因为在一个 SID 中可以指向n 架构?
请解释他们之间的关系。
答案 0 :(得分:0)
SID是数据库的唯一标识符,或者它是数据库实例的RAC系统。
服务是数据库提供的服务的标识符,应为“BILLING_APP”或“CUST_WEBSITE”等服务配置数据库。 http://docs.oracle.com/cd/B28359_01/server.111/b28320/initparams217.htm
顺便说一下,不要混淆数据库和实例。数据库是数据和控制(等)文件的集合,实例是访问它的内存区域和进程。 RAC每个数据库有多个实例,每个实例都可以向监听器注册,以提供数据库提供的全部或部分服务。
模式实际上是拥有对象的用户名,数据库中可以有多个模式。
因此,应用程序应引用SERVICE以通过某个主机和端口上的侦听器进行连接。侦听器将此解析为数据库(可能是注册为提供该服务的众多数据库之一)。以可能是也可能不是架构所有者的用户身份与数据库建立连接。出于安全原因,通常不会将连接作为模式所有者 - 事实上,最佳安全级别是作为User_A连接,调用User_B模式中的代码,并引用其他用户模式中的表。
答案 1 :(得分:0)
SID是服务ID,指的是单个Oracle数据库实例
服务名称与SID非常相似,但一个服务名称可以引用多个SID
E.g。在Dataguard方案中,主实例可能是SID_01和ORA_SRV。 SID_02和SID_03正在网络上的某个位置运行,并接收和应用日志文件。 SID_01失败并且SID_02被启动(已安装和已打开),现在它在网络上以ORA_SRV的形式公开。
与RAC类似,多个SID组成一个服务。
架构实际上是用户。
JDBC连接将采用某种形式的“HOST:PORT :( SID或服务名称)”。您必须连接到数据库,并使用用户名和密码进行连接。用户名(几乎总是)将您连接到该名称的模式。您可以在sql中引用带有虚线表示法的另一个模式中的对象,例如SCHEMA.OBJECT_NAME