web-dev-qa-db-ja.com

SQL Server 2014をOracle 12cに移行する:最適なオプション

Sql Server 2014データベースをOracleに移行する必要があります。最良のオプションは、移行ツールに付属のSQL Developerを使用することです。

説明されている手順を実行した後、SQL Serverのバージョンがサポートされていないために失敗します。 2012はOracleによるとサポートされていますが、2014と同じエラーで失敗します。そのため、少し問題が発生していると思います。私はInspirer MnMTKと呼ばれるツールを試しましたが、このツールはインストールさえできません(会社の問題を引き起こしました)。

今、私はこれを手動で行う段階にありますが、それは数時間かかるでしょう、私はDDL作成スクリプト変換でさえ満足しています。

助言がありますか?

[〜#〜]編集[〜#〜]

SQL Server 2014と2012の両方に対して発生するエラーは次のとおりです。

Java.lang.Exception: The plugin used to capture this model is not available.  Please re-install the plugin and try again before convert.

            at Oracle.dbtools.migration.workbench.core.ui.quickmigrate.QMWizard$ContextHelper.getMigrationPluginOnline(QMWizard.Java:918)

            at Oracle.dbtools.migration.workbench.core.ui.quickmigrate.CapturePageMigration.initPageState(CapturePageMigration.Java:312)

            at Oracle.dbtools.migration.workbench.core.ui.quickmigrate.CapturePageMigration.onEntry(CapturePageMigration.Java:81)

            at Oracle.ide.wizard.FSMWizard.gotoPanel(FSMWizard.Java:743)

            at Oracle.ide.wizard.FSMWizard.setSelectedPage(FSMWizard.Java:463)

            at Oracle.bali.ewt.wizard.BaseWizard.selectPage(BaseWizard.Java:1964)

            at Oracle.ide.wizard.FSMWizard.selectPage(FSMWizard.Java:447)

            at Oracle.ide.wizard.FSMWizard.doNext(FSMWizard.Java:322)

            at Oracle.bali.ewt.wizard.BaseWizard$Action$1.run(BaseWizard.Java:3944)

            at Java.awt.event.InvocationEvent.dispatch(InvocationEvent.Java:209)

            at Java.awt.EventQueue.dispatchEventImpl(EventQueue.Java:679)

            at Java.awt.EventQueue.access$400(EventQueue.Java:81)

            at Java.awt.EventQueue$2.run(EventQueue.Java:640)

            at Java.awt.EventQueue$2.run(EventQueue.Java:638)

            at Java.security.AccessController.doPrivileged(Native Method)

            at Java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.Java:86)

            at Java.awt.EventQueue.dispatchEvent(EventQueue.Java:649)

            at Java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.Java:269)

            at Java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.Java:184)

            at Java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.Java:178)

            at Java.awt.Dialog$1.run(Dialog.Java:1052)

            at Java.awt.Dialog$3.run(Dialog.Java:1104)

            at Java.security.AccessController.doPrivileged(Native Method)

            at Java.awt.Dialog.show(Dialog.Java:1102)

            at Java.awt.Component.show(Component.Java:1615)

            at Java.awt.Component.setVisible(Component.Java:1567)

            at Java.awt.Window.setVisible(Window.Java:846)

            at Java.awt.Dialog.setVisible(Dialog.Java:987)

            at Oracle.bali.ewt.wizard.WizardDialog.runDialog(WizardDialog.Java:382)

            at Oracle.bali.ewt.wizard.WizardDialog.runDialog(WizardDialog.Java:298)

            at Oracle.ide.dialogs.WizardLauncher.runDialog(WizardLauncher.Java:51)

            at Oracle.dbtools.migration.workbench.core.ui.quickmigrate.QMWizard.launch(QMWizard.Java:117)

            at Oracle.dbtools.migration.workbench.core.QMLauncher.launch(QMLauncher.Java:40)

            at Oracle.dbtools.raptor.controls.sqldialog.ObjectActionController.handleEvent(ObjectActionController.Java:195)

            at Oracle.ide.controller.IdeAction.performAction(IdeAction.Java:529)

            at Oracle.ide.controller.IdeAction.actionPerformedImpl(IdeAction.Java:884)

            at Oracle.ide.controller.IdeAction.actionPerformed(IdeAction.Java:501)

            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.Java:1995)

            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.Java:2318)

            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.Java:387)

            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.Java:242)

            at javax.swing.AbstractButton.doClick(AbstractButton.Java:357)

            at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.Java:809)

            at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.Java:850)

            at Java.awt.Component.processMouseEvent(Component.Java:6329)

            at javax.swing.JComponent.processMouseEvent(JComponent.Java:3275)

            at Java.awt.Component.processEvent(Component.Java:6094)

            at Java.awt.Container.processEvent(Container.Java:2040)

            at Java.awt.Component.dispatchEventImpl(Component.Java:4692)

            at Java.awt.Container.dispatchEventImpl(Container.Java:2098)

            at Java.awt.Component.dispatchEvent(Component.Java:4520)

            at Java.awt.LightweightDispatcher.retargetMouseEvent(Container.Java:4574)

            at Java.awt.LightweightDispatcher.processMouseEvent(Container.Java:4235)

            at Java.awt.LightweightDispatcher.dispatchEvent(Container.Java:4165)

            at Java.awt.Container.dispatchEventImpl(Container.Java:2084)

            at Java.awt.Window.dispatchEventImpl(Window.Java:2492)

            at Java.awt.Component.dispatchEvent(Component.Java:4520)

            at Java.awt.EventQueue.dispatchEventImpl(EventQueue.Java:681)

            at Java.awt.EventQueue.access$400(EventQueue.Java:81)

            at Java.awt.EventQueue$2.run(EventQueue.Java:640)

            at Java.awt.EventQueue$2.run(EventQueue.Java:638)

            at Java.security.AccessController.doPrivileged(Native Method)

            at Java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.Java:86)

            at Java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.Java:97)

            at Java.awt.EventQueue$3.run(EventQueue.Java:654)

            at Java.awt.EventQueue$3.run(EventQueue.Java:652)

            at Java.security.AccessController.doPrivileged(Native Method)

            at Java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.Java:86)

            at Java.awt.EventQueue.dispatchEvent(EventQueue.Java:651)

            at Java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.Java:269)

            at Java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.Java:184)

            at Java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.Java:174)

            at Java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.Java:169)

            at Java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.Java:161)

            at Java.awt.EventDispatchThread.run(EventDispatchThread.Java:122)

調べてみましたが、このプラグインが見つからないというエラーは、SQL Serverのバージョンがサポートされていないことに関連しています。

これは、「ソースデータベース」と「キャプチャ」の間を移動する移行ウィザードの同じ時点で発生します。

私が使用しているjtdsのバージョンは1.2です。これは、SQL Developerがサポートできる最新バージョンです。より新しいバージョンを使用しようとしましたが、接続できません(このバージョンの制限を確認したのはこのときでした)。

*編集2 *

オフラインで移行することで回避策を見つけました。データベースキャプチャスクリプトを作成する必要があります。ただし、これの最大SQLサーバーバージョンは2008です。念のため、これを2012年に対して実行してみましたが、どちらも機能しません。

2
sapatos

私の場合、ErwinのようなERDツールを使用してデータベースのERD図を生成します。 Erwinを使用してSQL Server ERDを取得し、同等のOracleを生成できます。次に、ERDツールから作成したすべてのテーブルを生成し、ツールを使用するか、制約、インデックス、およびトリガーのDDLを手動で生成します。

これを行うと、必要なすべてのテーブルを含むスキーマを作成し、異種サービスを使用してSQL Serverへのデータベース接続を作成できます。この時点で、制約、インデックス、トリガーなしでOracleに必要なすべてのテーブルが揃いました。各SQL Serverテーブルを調べ、選択したとおりに挿入を実行できます。最後に、スクリプトを実行して、制約、インデックス、トリガーを作成します。 T-SQLとPL/SQLには互換性がないため、トリガーを含め、ストアドプロシージャを手動で書き直す必要があります。

Erwinには、SQL ServerまたはPL/SQLのいずれかに変換できるコードを誰かが記述できるマクロ言語があり/あり、私は約15年前に両方で動作するアプリケーションを管理しました。ただし、一度移行する場合は、気にしません。個人的な経験に基づくと、このプロセスは、プロセスをスクリプト化して、移行プロセスの多くの反復を実行できる場合に最適に機能します。次に、各反復後にテストします。

2
Gandolf989