我对甲骨文很陌生。我创建了一个类似于cdb1的CDB,然后在pdb1中创建了一个PDB。现在,我可以使用如下方式连接到我的PDB:
sqlplus user/password@server:port/pdb1
但是,我不能在不同的CDBs中有两个同名的PDB吗?如果发生这种情况,sqlplus将不知道我想连接到哪个PDB。侦听器是否有一些健壮的方法来映射连接到运行监听器的计算机上的CDB中的实际PDB的PDB?
编辑:我发现当我在pdb1连接标识符中写入sqlplus时,实际上不是PDB的名称,而是服务的名称,它恰好与PDB的名称相同。
据我所知,我可以使用select name, pdb from v$services;将服务名称映射到PDB名称。
它似乎将服务映射到CDBs,我需要输入lsnrctl service。然后我得到了输出,就像:
Service "pdb1" has 1 instance(s).
Instance "cdb1", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER那么,我猜cdb1指的是国开行cdb1吗?或者它也只是碰巧有相同的名字?
再一次,声明它有一个实例的服务意味着它可以有两个实例,这些实例可以指向独立的CDBs,这使我回到了如何区分同名的不同PDB的最初问题。
发布于 2018-02-10 16:04:30
很容易。
的完整语法是:
CONNECT username@[//]host[:port][/service_name][:server][/instance_name]您只需要指定service_name和instance_name。
$ lsnrctl services
...
Service "pdb1" has 2 instance(s).
Instance "RAIN", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:3 refused:0 state:ready
LOCAL SERVER
Instance "WIND", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:3 refused:0 state:ready
LOCAL SERVER您将有多个实例为同一服务提供服务。下面可以连接到任何实例,但侦听器决定它转发给请求的是哪个实例,而不是您:
sqlplus user/password@localhost:1521/pdb1下面的命令总是连接到其中一个实例。如果该实例已关闭,则连接尝试将失败,即使有另一个实例提供了相同的服务:
sqlplus user/password@localhost:1521/pdb1/rain
sqlplus user/password@localhost:1521/pdb1/windhttps://dba.stackexchange.com/questions/197528
复制相似问题