我有一个项目名称下拉列表,并根据所选值生成架构下拉列表。
生成架构列表后,有一个“选择文件”选项,可以选择要在多个架构上运行的脚本名称。
项目列表值和架构列表值都存储在数据库中。数据库中还有另一个表,用于存储架构凭据。
我想知道如何在这些多个架构上创建连接,以及如何在从该架构下拉列表中选择的多个架构中运行脚本。
我已经使用 iBatis 框架使用 scriptrunner
方法在一个模式中执行了代码。
表 1:项目名称
PROJECT_PK,
PROJECT_CODE,
PROJECT_NAME
表2:组件名称
COMPONENT_PK,
COMPONENT_CODE,
COMPONENT_NAME,
PROJECT_PK
表 3:SchemaName
(此表包含其他架构的凭据)
SCHEMA_PK,
SCHEMA_NAME,
PASSWORD,
ORACLE_SID,
HOST_NAME,
PORT_ID
表 4:PROJECT_DETAIL
PROJECT_DETAIL_PK,
COMPONENT_PK,
SCHEMA_PK
表5:COMPONENT_DETAILS
COMPONENT_DETAILS_PK,
PROJECT_PK,
SCHEMA_PK
我正在附上场景图像。
最佳答案
我建议您创建一个“ super 模式”,并为每个其他模式提供适当的授权,并为此“ super 模式”创建 JDBC 连接。这将使您需要对 sql 脚本进行一些篡改 - 您需要使用一些标记来编写它以轻松替换模式,例如
ALTER TABLE ${SCHEMA_MARKER}.INVOICES ADD CLIENT_ADRRESS Varchar2(35);
您的 Java 代码会将其替换为您所针对的架构。凭借一些想象力,您可以扩展此想法以在所有架构上执行批量 DDL 脚本。
顺便说一句,根据您的问题,我了解到您有许多具有相同结构的模式。我曾经被迫与这样的遗留结构一起工作,所以我知道公司结构有很大的动力;尽管如此,我必须建议您重新设计这样的系统。例如,考虑在 super 模式上创建物化 View ,复制模式结构,但在每个表主键中使用一个新字段(这个新字段将填补使任何人在许多模式中分隔数据的空白)。
这肯定会让您的查询缓存受到的影响少得多,并且将使需要使用“分布式”数据的任何新软件的开发变得更加容易。
关于java - 如何在运行时创建多个模式连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21108656/