Как синхронизировать данные из SQL Server в Oracle с помощью Grails - PullRequest
0 голосов
/ 30 августа 2018

Я использую Grails 3.2.8, Java 8 и Oracle 11g. Мне нужно вставить и синхронизировать данные из SQL Server в Oracle для 1 таблицы с помощью Grails. Я пытался с Oracle GoldenGate, но я не могу реализовать это. Есть ли другой способ сделать это? Если источник данных Grails может дать решение, то как это сделать?

1 Ответ

0 голосов
/ 06 сентября 2018

Вы можете создавать соединения с 2 базами данных, используя 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...