No.3ベストアンサー
- 回答日時:
繰り返し同じコマンドを実行する方法として、isqlの場合は、
go の後に数字をいれることで、コマンドを繰り返し実行できます.
例えば
insert table values ( 1 )
go 10
と指定すると、insert 文を10回繰り返し実行します。
また、set rowcount を使用すると、この後実行されるSQLの対象件数を指定することができます。
例えば
set rowcount 1000
Select * from Table
とすれば1000件が検索されます。
同じように
set rowcount 1000
Delete Table
とやれば100件、削除されるはずです。
ループを使用したい場合 While 文を使います.
前述のset rowcount とあわせて使うといいかもしれません。
set rowcount 1000
declare @count int
select @count = 0
while @count < 100
begin
delete Table [where条件]
select @count = @count + 1
end
削除の対象となる条件がしていされていないので、テーブル先頭の方から適当に1000件消えてしまいます.
実際に作業される際は条件を指定する必要があると思います.
また、Device がいっぱいになるとのことですが、トランザクションログ用のデバイスのことでいいですよね。
上記の方法では、いずれにせよトランザクションログはいっぱいになってしまうと思います.Dump tran 等で適宜対処する必要があるでしょう。
残したい行の条件が指定できるのであれば、 select into コマンドで
別テーブルに残したい行を移動し、元のテーブルを trancate table で削除、テーブルをリネームするのがいいと思います。select into や truncate table は大量にトランザクションログを出さないはずなので何度もコマンドを発行するよりいいと思います.
実際に処理を実行される場合は、必要なデータまで消さないように十分注意して行ってくださいね。
各コマンドの詳細はマニュアルを確認してください。
PDFのマニュアルのURLを参考URLに記入しておきます。
以上、がんばってください。
参考URL:http://www.sybase.co.jp/product/manuals/index.html
この回答への補足
YanYasさん、回答ありがとうございました。
早速使ってみようかと思いますが、2点ほど質問させてください。
while文を使用した際、1000件になるまでまわしていますが、一番初めにset rowcount 1000 を何故セットする必要があるのでしょうか?
トランザクションがいずれにせよいっぱいになる(!)とのことでしたので、Dump tran を行いたいと思います。
ちなみに checkpoint コマンドはトランザクションログのクリアになりますか?
初心者の質問ですみません。
が、たいへん助かってます!
No.2
- 回答日時:
#1です。
別の方法を書きます。必要なレコードをエクスポートし、表をdrop table で表削除した後、
新たに create table すれば、フラグメンテーションも解消されるので、良いかも!
そして、エクスポートファイルからインポートすると。
No.1
- 回答日時:
Sybaseですか。
。 使ったことはないですが、他社DBからの類推で話をします。100万件のレコードの削除ということですが、1つの表の全レコードを削除するのですか?
それとも、不要なレコードだけ削除するのですか?
前者の場合、Oracleでは表内の全レコードを削除するSQL文が存在します。
"truncate table"文です。このSQL文はレコード管理ブロック部のみ初期化するので、
delete文より遥かに高速です。トランザクション処理をスキップしますので。
Sybaseにも同様なSQL文があればよいのですが。。
-----------------------
「一気に削除するとDeviceがいっぱいとなる」とのことですが、おそらく、
トランザクション管理領域(Oracleでは「ロールバックセグメント」)がパンクするためでしょう。
DBのトランザクション設定を削除するときだけ、変更してみてはいかがですか?
Oracle、DB2、informixでもそうですが、トランザクション処理を変更することができます。
トランザクション処理を一切行わない、いわゆる「ダーティリード・モード」にすれば、
「一気に削除するとDeviceがいっぱいとなる」現象は発生しないと思います。
一気に削除できるでしょう。
一度、マニュアルを見てはいかかでしょうか?
もし、うまくいった場合、トランザクション設定を元に戻すことも忘れずに。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
数百万件レコードのdelete
SQL Server
-
大量レコードをTRUNCATEせずにすばやく削除する方法
Oracle
-
100万件レコードdelete
SQL Server
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスのクエリでレコード削...
-
テーブルが削除できない
-
アクセス2010について
-
HiRDBのPURGEとDROPの違い
-
Access2000の削除クエリで消し...
-
Excel テーブル内の空白行の削除
-
トリガって、自分自身のテーブ...
-
L2SWはARPテーブルを持っている?
-
Accessでデータシートに同じデ...
-
SELECT 文の NULL列は?
-
テーブル名をカラムとして取得...
-
「テーブルに座って……」という...
-
Accessのテーブルデータを一気...
-
カラム位置変更
-
update文で改行を入れる
-
数値をNUMBER型にするかCHAR型...
-
ROWNUMでUPDATEをしたいのです...
-
SQL、2つのテーブルで条件一致...
-
テーブルで一番古いレコードだ...
-
2台のサーバー間でのテーブル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel テーブル内の空白行の削除
-
アクセスのクエリでレコード削...
-
HiRDBのPURGEとDROPの違い
-
トリガって、自分自身のテーブ...
-
CSVファイルから一括して削除す...
-
大量のレコードを削除する方法
-
アクセス2010について
-
ACCESSのマクロでテーブルのデ...
-
列のDEFAULT設定を削除するコマ...
-
テーブルデータの削除による対応策
-
Access2000の削除クエリで消し...
-
物理削除と論理削除、どっちが...
-
MySQLのストアドでファイルを削除
-
条件付DELEATE文について
-
ここで言う参考書のエイリアス...
-
連番をふり直した後の文字の桁...
-
リレーションについて
-
テーブルが削除できない
-
すべてのテーブル削除
-
【SQLServer2000】複数のテーブ...
おすすめ情報