我正在使用 Grails 3.2.8、Java 8 和 Oracle 11g。 我需要使用 Grails 将数据从 SQL Server 插入和同步到 Oracle 的 1 个表。 我尝试过使用 Oracle GoldenGate,但我无法实现它。 还有其他方法吗?如果 grails 多数据源可以提供解决方案,那么该怎么做?
最佳答案
您可以使用 groovy Sql 创建到 2 个数据库的连接,而不用担心 Grails 域类,也许在 quartz job 中如下所示,每小时运行一次。
quartz 作业
class dbMoveJob {
static triggers = {
cron name: 'dbMoveJobCron', cronExpression: "0 0 0/1 * * ?"
}
def dbMoveService
def execute() {
dbMoveService.dbMove()
}
}
服务
import groovy.sql.*
import org.springframework.beans.factory.annotation.Value
class dbMoveService {
static final String SQL_SERVER_DRIVER = 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
static final String ORACLE_DRIVER = 'oracle.jdbc.OracleDriver'
@Value( '${sqlServerUrl}' )
def sqlServerUrl
@Value( '${sqlServerUser}' )
def sqlServerUser
@Value( '${sqlServerPw}' )
def sqlServerPw
@Value( '${oracleUrl}' )
def oracleUrl
@Value( '${oracleUser}' )
def oracleUser
@Value( '${oraclePw}' )
def oraclePw
def dbMove() {
def sqlServerDb
def oracleDb
try {
sqlServerDb = Sql.newInstance( sqlServerUrl, sqlServerUser, sqlServerPw, SQL_SERVER_DRIVER )
oracleDb = Sql.newInstance( oracleUrl, oracleUser, oraclePw, ORACLE_DRIVER )
sqlServerDb.eachRow( 'select * from sql_server_table' ) {
oracleDb.executeInsert( 'insert into oracle_table( oraclefield1, oraclefield2 ) values( ?, ? )', [it.sqlserverfield1, it.sqlserverfield2] )
}
}
finally {
sqlServerDb?.close()
oracleDb?.close()
}
}
}
@Value 注释变量将从 application.yml 派生。
关于sql-server - 如何使用 Grails 将数据从 SQL Server 同步到 Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52089192/