2016-08-04 4 views
2

私は、基礎となるデータベースにSybase ASE 15.7を使用するアプリケーションを用意しています。以前は、テーブルを分割して2つの異なるデータベースに配置することをお勧めしました.db1とdb2を考えてみましょう。私は名前の競合がないことを知っています。つまり、db1からdb2へ、またはその逆のいずれかのオブジェクトをマイグレーションすることができます。Sybase ASE 15.7 - 2つのデータベースのオブジェクトを単一のデータベースにマージする方法はありますか?

データを移行する最適なオプションは何でしょうか。私は、remeiningデータベースに必要なすべてのオブジェクトを作成するSQLスクリプトを持っています。これを使用するよりも良い選択肢があります:

1> INSERT INTO db2..tblA 
2> SELECT * FROM db1..tblA 
3> GO 

テーブルのいくつかは非常に巨大です。だから私は、トランザクションログがいっぱいになっていないことに注意する必要があります。

BCPはまた、そのようなオプションがあります:

bcp db1..tblA out tblA.save -U... -P.... 
bcp db2..tblA in tblA.save -U... -P.... 

は、両方のデータベースに接続することができましたし、このようなものを扱うことができる利用可能なツールはありますか?

多分誰かが考えを持っています。前もって感謝します。あなたがログに記録されない操作を実行する可能性がいっぱいのログを防止するために

イェンス

答えて

1

よろしく。 これが不可能な場合、コピー手順中にログチェックポイントを切り捨てるようにDBオプションを設定できますが、この2番目の方法ではログが使い果たされないようにするには不十分です。 ログされていない操作が使用されている場合は、完了後、新しいベースラインのバックアップを作成するために完全なDBダンプを実行する必要があります。 オフラインのメンテナンスウィンドウ外で実行された場合、未記録操作は危険です。

チェックポイントに切り捨て(チェックポイントを次の操作を行い、その後、実行)

/オフ使用

使用マスターに切り捨てモードを切り替えます。

sp_dboption、 'trunc log on chkpt'、[false | true]; BCPは/ DB(次の操作を実行した後にチェックポイントを実行する)

使用マスター上INTOを選択できるようにするには

sp_dboption、 'select into/bulkcopy/pllsort'、[false | true];

はDB「DBNAME」使用中のチェックポイントのチェックポイント

を実行します。

'dbname'を使用します。

チェックポイント;

BCPオプション

あなたが速いBCPを使用していることを確認後、BCPを使用することを選択した場合。高速BCPは未記録です。

Fast BCPを使用するための規則は、http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc30191.1570100/doc/html/san1367605064460.htmlで指定されています。

「抽出」(アウト)実行と「ロード」の2つのフェーズで実行できます。コマンドは次のようになります。

SYBASE/$ SYBASE_OCS/binに/ BCPの$ {DB1NAME} .. $ {TABNAME}アウト$ DUMPDIR/$ DB1NAME/$ {TABNAME} .TXT -C -U $ SQLUSER -P $ USERPASS -S $ SERVER1NAME

SYBASE/$ SYBASE_OCS/binに/ BCPの$ {DB1NAME} .. $ DUMPDIR/$ DB1NAME/$ {TABNAME} .TXT -C -U $ SQLUSER -P $ USERPASS -S $ SERVER1NAME

に$ {} TABNAME

DBに選択/一括コピーDBオプションを設定する必要があります。

この操作の後でDBをダンプする必要があります。

ログに記録されない操作 - 同じサーバー内から両方のデータベースへのアクセス権を持っているとして、あなたは、SELECT INTOを使用してを見ている必要があり

中に、選択します。

'select into'は未ログインの操作です。

select intoステートメントのターゲットテーブルが存在しないため、sp_renameを使用して元のターゲットテーブルを移動し、クエリ内の2つのソーステーブルを使用してselectを実行します。

これには、DBに選択/一括コピーDBオプションを設定する必要があります。

この操作の後でDBをダンプする必要があります。

これは、Unionのステートメントのために遅いかもしれません。また、ユニオンは良いオプションではない行が一意ではないです。

インデックス一般に

おそらく、コピー中にそれをドロップし、その後、それを再作成する方が効率的であるターゲット表上の大きなインデックス(特に1をクラスタ化)がある場合。

関連する問題