C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

SQL Server テーブルのデータ移行について

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■100399 / inTopicNo.1)  SQL Server テーブルのデータ移行について
  
□投稿者/ こうべ (1回)-(2022/07/27(Wed) 09:31:45)

分類:[VB.NET/VB2005 以降] 

データが500万レコードあるテーブルにフィールドを追加しようとしたら、下記のエラーが発生しました。(フィールド数は300あります。)

「実行タイムアウトの期限が切れました。操作完了前にタイムアウト期間が過ぎたか、サーバーが応答していません。」

下記のSQLでテーブルをコピーし、元のテーブルを空にした後、フィールドを追加した後でデータを移そうと考えました。
SELECT * INTO <コピー先テーブル名> FROM <コピー元テーブル名>

データ移行時のSQLは下記の通りです。
INSERT INTO 新テーブル名 (フィールド名, ・・・) SELECT フィールド名, ・・・ FROM コピーしたテーブル名

データ移行時、下記のエラーが発生しました。
「'ACTIVE_TRANSACTION' により、データベース '・・・' のトランザクション ログがいっぱいになっています。」

データベースの復旧モデルは「単純」となっており、トランザクション ログの圧縮などは行えないと思います。

コピーしたテーブルから1レコードずつ取り出し、新テーブルにデータを移せばできるとは思いますが、すごく時間がかかりそうで不安です。

どのようにデータ移行するのがお勧めでしょうか?
引用返信 編集キー/
■100400 / inTopicNo.2)  Re[1]: SQL Server テーブルのデータ移行について
□投稿者/ furu (174回)-(2022/07/27(Wed) 09:51:01)
No100399 (こうべ さん) に返信
> コピーしたテーブルから1レコードずつ取り出し、新テーブルにデータを移せばできるとは思いますが、すごく時間がかかりそうで不安です。
1トランザクションで1万レコードずつインサートしてはどうですか?
新テーブルのユニーク制約やインデックスは後から付けたほうが速いです。
引用返信 編集キー/
■100411 / inTopicNo.3)  Re[1]: SQL Server テーブルのデータ移行について
□投稿者/ 伝説のカレー (33回)-(2022/07/28(Thu) 15:30:24)
No100399 (こうべ さん) に返信

私ならデータを全部CSVに出力してCSVを数万件ごとに分割してBulkInsertで取り込みます
1回で処理するより時間はかかりますけど進捗を確認できます
取り込んだファイルを削除すれば途中でエラーになったとしても単純な再実行でリカバリできます
っていう作りにします
引用返信 編集キー/
■100412 / inTopicNo.4)  Re[1]: SQL Server テーブルのデータ移行について
□投稿者/ 粗品 (3回)-(2022/07/28(Thu) 16:48:55)
No100399 (こうべ さん) に返信
>
> データベースの復旧モデルは「単純」となっており、トランザクション ログの圧縮などは行えないと思います。

DBが何なのか、バージョンはいくつなのか。くらいは書かないと。みんながみんなエスパーじゃない

SQLServerだというテイで進めると復旧モデルが単純でもログは肥大しますし圧縮も出来ます。
というか実ファイルサイズは見てない?
ManagementStudioのDB名を右クリ、タスク>圧縮>ファイル
ファイルの圧縮ダイアログが開いたらファイルの種類を「データ」から「ログ」に変更
圧縮アクションを「未使用領域の解放前にページを再構成する」を選択して圧縮先のファイルのサイズを0に変更
あとはOKボタンです
引用返信 編集キー/
■100413 / inTopicNo.5)  Re[1]: SQL Server テーブルのデータ移行について
□投稿者/ KOZ (306回)-(2022/07/28(Thu) 23:27:27)
No100399 (こうべ さん) に返信
> 「実行タイムアウトの期限が切れました。操作完了前にタイムアウト期間が過ぎたか、サーバーが応答していません。」

ツールは何を使ってらっしゃるんでしょうか?
タイムアウト時間を延ばすことはできませんか?

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ