Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用Grails将数据从SQL Server同步到Oracle_Sql Server_Database_Oracle_Grails - Fatal编程技术网

Sql server 如何使用Grails将数据从SQL Server同步到Oracle

Sql server 如何使用Grails将数据从SQL Server同步到Oracle,sql-server,database,oracle,grails,Sql Server,Database,Oracle,Grails,我正在使用Grails3.2.8、Java8和Oracle11g。 我需要使用Grails将数据从SQL Server插入并同步到Oracle for 1表。 我已经尝试过Oracle GoldenGate,但无法实现。 还有其他办法吗?如果grails multi-datasource能够提供解决方案,那么如何做到这一点呢?您可以使用groovy Sql创建到这两个数据库的连接&而不必担心grails域类,可能在下面这样一个每小时运行一次的系统中 石英作业 class dbMoveJob {

我正在使用Grails3.2.8、Java8和Oracle11g。 我需要使用Grails将数据从SQL Server插入并同步到Oracle for 1表。 我已经尝试过Oracle GoldenGate,但无法实现。
还有其他办法吗?如果grails multi-datasource能够提供解决方案,那么如何做到这一点呢?

您可以使用groovy Sql创建到这两个数据库的连接&而不必担心grails域类,可能在下面这样一个每小时运行一次的系统中

石英作业

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()
        }
    }
}

@带值注释的变量将从application.yml派生。

这是一次性操作吗?有几排?行的数据类型是否与数字和文本(例如blob、clob)不同?否。这是一个连续操作。我的oracle表中有6列,其中包含数字、文本和日期值。