如何在Oracle RDS中连接到指定的多个Schema
连接失败的原因
Oracle 中的数据库服务名/SID 和 Schema 是完全独立的概念:你连接串@后面跟的demo是 Oracle RDS 实例的数据库服务名,而你创建的database1是用户(Oracle 中用户和同名Schema一一绑定),不是服务名,因此把database1放在服务名的位置会连接失败。
SQLPlus 连接指定Schema的两种方法
- 直接用对应用户登录实例服务
你创建的database1本身就是可登录的数据库用户,直接用该账号登录demo服务,登录后默认当前Schema就是database1,命令如下:
sqlplus database1/database1@oracle.xxxxxx.us-east-1.rds.amazonaws.com:1521/demo
- 用原有账号登录后切换Schema
如果需要用原有管理员账号操作指定Schema,登录后执行Session切换语句即可:
ALTER SESSION SET CURRENT_SCHEMA = database1;
执行后后续所有未加Schema前缀的SQL操作,都会默认指向database1下的对象。
JDBC Thin 驱动连接指定Schema的方法
方法1:URL 直接指定Schema(推荐)
Oracle 12.2 及以上版本的 JDBC 驱动支持在连接URL中通过currentSchema参数指定默认Schema,无需额外修改代码,适配你原有多数据库架构的改动最小:
jdbc:oracle:thin:@//oracle.xxxxxx.us-east-1.rds.amazonaws.com:1521/demo?currentSchema=database1
方法2:连接池配置初始化SQL(兼容旧版本驱动)
如果你使用的JDBC驱动版本低于12.2,可以在数据库连接池(HikariCP、Druid、DBCP等通用连接池都支持)中配置连接初始化执行的SQL,每次新建连接时会自动切换到目标Schema:
ALTER SESSION SET CURRENT_SCHEMA = database1
方法3:使用对应Schema的账号连接
和SQLPlus的逻辑一致,直接用database1用户创建JDBC连接,默认当前Schema就是database1,URL格式如下:
jdbc:oracle:thin:database1/database1@//oracle.xxxxxx.us-east-1.rds.amazonaws.com:1521/demo
提示:Oracle 中用户和Schema默认同名且一一绑定,你按当前方式创建7个对应用户即可完全适配原Postgres的7个独立数据库的逻辑,业务SQL如果没有写死库名前缀的话几乎不需要修改。
内容的提问来源于stack exchange,提问作者Bharat
相关产品推荐
相关产品推荐

