2

MS SQL2005からMySQL5.1に移行する必要がある約140〜150のストアドプロシージャがあります

過去8時間でそれらの0を正常に移植した後、私は立ち寄って、誰かが経験やヒントを持っているか、または役立つことができるいくつかのutilアプリを知っているかどうか尋ねることに決めました。

MySQL Administratorはあまり役に立ちません。「MySQLエラー番号1064SQL構文にエラーがあります。正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください」。平均SPが+100行の長さであることを考えると、問題が何であるかを単に推測することはオプションではありません。

例えば。これは私が得る正確なエラーです:

  Script line: 1    You have an error in your SQL syntax; check the manual that
   corresponds to your MySQL server version for the right syntax to use near '' at line 5

次に、5行目で私が持っているのは次のとおりです。

declare PropID float;
4

3 に答える 3

3

Gartner Group は、2 つの類似した言語間の手動変換が 1 日あたり約 150 行の割合で発生していると報告しています。彼らによると、あなたの進歩率は平均よりほんの少しだけ低いです :-} さらに悪いことに、あなたの前に 150 工日の努力が必要であると予測しています。

これが、定期的かつ信頼できる方法で変換ルールを適用できる自動移行ツールを作成する理由です。運が良ければ、誰かがあなたの前にこれを行っています。人々がやりたいと思うかもしれないfrom-to 変換のペアの数は非常に多く、人々行ったセットよりもはるかに多いので、通常は運が悪い.

次に誰かが言うのは、「正規表現を使う」ということです。「通常」ではなく「コンテキストフリー」のプログラミング言語構造を見つける必要があるため、おそらくうまくいきません。

これを行うためのツールを入手する 1 つの方法は、プログラム変換を使用することです。これらは、あるコード フラグメントを別のコード フラグメントに置き換えるプログラムされたアクションです。通常、テキスト文字列ではなく、コンパイラのようにプログラム要素に対してアクションを実行できるように、完全な言語パーサーが必要です。

プログラム変換を記述する良い方法は、言語の表面構文をパターンとして使用することです。これは、基本的に「これを見たら、それをそれで置き換えてください」というものです。これらは、「コンテキストフリー」の問題を処理するために強化された「正規表現」と考えてください。

このような表面的な構文プログラムの変換を受け入れることができるツールが、DMS Software Reengineering Toolkitです。

信頼できる変換をコーディングするには、ある程度の努力が必要です。変換するコードは約 15,000 行あります。変換するコードの量がこれほど少ない場合、変換をコーディングすることと、単に弾丸をかじって作業を行うこととの間のトレードオフは困難です。

于 2009-12-06T19:33:47.337 に答える
1

MySQL 管理者の代わりにMySQL Query Browserを試すことができます。

MySQL Administrator が MySQL サーバーを管理するように設計されているのに対し、MySQL Query Browser は、MySQL データベース内に保存されているデータのクエリと分析を支援するように設計されています。

于 2009-12-06T19:27:41.067 に答える
0

強力なツールからあまり強力でないツールに移植しています。古い手順で MySQL がサポートしていない機能を使用すると、移植が事実上不可能になる可能性があります。

役立つかもしれないことの 1 つは、ほとんどの SQL Server プロシージャが何らかのビジネス ロジックを実装していることです。良いニュースは、多くの場合、それらのごく一部しか使用されていないことです。未使用のプロシージャを除外すると、多くの作業を節約できます。

悪いニュースは、移植後にビジネス手順をテストする必要があることです。最高のプログラマーでさえ、別の言語でそれらを書き直して、それらが機能することを確認することはできません。これは、多くのテスト作業と、移植された手順が本番環境に入った後の多くのサポート作業を意味します。

于 2009-12-06T20:12:31.600 に答える