4.1 启用跨租户数据库访问
在租户数据库之间的只读查询是支持的,但是缺省状态是不启用的。你必须要在系统数据库中启用这个功能,然后再配置两个数据库之间的通讯
Situation
租户数据库TN1需要访问租户数据库TN2下面的Table_A
Procedure
1.在系统数据库中启用cross_database_access
ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM')
set ('cross_database_access', 'enabled')='true' WITH RECONFIGURE;
2.配置源数据库和目标数据库
ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM')
set ('cross_database_access', 'targets_for_<source_db_name>')='<target_db1>[,<target_db2>...]' WITH RECONFIGURE;
NOTE:<source_db_name>是源数据库,<target_db1>是目标数据库,<source_db_name>从<target_db1>取数据
Example:
ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM')
set ('cross_database_access', 'targets_for_TN1')='TN2' WITH RECONFIGURE;
3.在目标数据库(TN2)中创建用户,并将这个用户与源数据库(TN1)的用户做一个映射
Example:
CREATE USER User_2 PASSWORD aA111111;
ALTER USER User_2 ADD REMOTE IDENTITY User_1 AT DATABASE TN1;
或者直接用一条语句替换
CREATE USER User_2 PASSWORD aA111111 WITH REMOTE IDENTITY User_1 AT DATABASE TN1;
4.将Table_A的查询权限赋给User_2
GRANT SELECT ON TABLE Table_A TO User_2 WITH GRANT OPTION;
5.在TN1中使用用户User_1查询TN2中表Table_A 的数据
4.2 使用跨租户数据库访问会遇到的问题
Situation 1
![](https://i-blog.csdnimg.cn/blog_migrate/ff853e775e2dfa5d5ff3436253cfef92.png)
不支持多级租户数据库访问
Situation 2
![](https://i-blog.csdnimg.cn/blog_migrate/c56aa67c12d4a6350dbe2fcd39d14700.png)
涉及到多个租户数据库对象查询所生成的执行计划可能产生任意两个租户数据库之间的访问,例如上面的例子,DB2中的表需要与DB3中的表做关联,你就需要启用相关数据库之间的通信,解决方法如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/b66c7b38ab00e2b2ecf11be8b206f3db.png)
Situation 3
如果你在DB2中创建了一个依赖与DB3中表的view,当你删除了DB3的表并且重新创建了它,当你访问DB2中的view的时候依旧会报错(error message:invalidated view or invalidated procedure.),这个时候你需要重新创建view才能是view再次生效
![](https://i-blog.csdnimg.cn/blog_migrate/427f0dd9be4a2e900ceae6527ae6216f.png)