「 なぜ切り捨てとドロップの両方を使用するのですか? 」という題名の質問の回答の抜粋を見つけました:
「TRUNCATEはログに記録され、ロールバックできます。..これらの誤りについて反省します。この反論はSQL Serverの観点から書いていますが、ここで言うことはすべて、Sybaseにも同様に適用できるはずです。」回答済み 11月8日21:39に11
コメントを追加しようとしましたが、元の投稿は保護されているため、この新しい質問を回避策として使用します。
上記はMicrosoft SQL Serverに当てはまる可能性がありますが、Sybaseには当てはまりません-以下のASEエラー226を参照してください
1> BEGIN TRAN
2> TRUNCATE TABLE xyz
3> go
Msg 226, Level 16, State 1:
Server 'ASE16', Line 2:
TRUNCATE TABLE command not allowed within multi-statement transaction.
1> ROLLBACK
2> go
さらに-ドロップ前に切り捨てても違いはないという考えにほぼ同意します...
DROP TABLE自体はわずかですが、テーブルページの割り当て解除はログに記録されないので、それ自体で切り捨てると、驚くほど少量のログが発生するようです。
SYSLOG監査証跡:単独で切り捨てます(以下に示すように、TXシーケンスは表示されている最新の5つのトランザクションに基づいています)
Log Record Type Op TX seq
---------------------------------------- -- -----------
======>Checkpoint Record 17 5
Begin Xact 0 5
Delete Extent Log Record 77 5
Direct Update/In Place Update 9 5
Update Record for DOL Table 65 5
End Xact 30 5
======>Checkpoint Record 17 4
SYSLOG監査証跡:単独でテーブルをドロップします(以下に示すように、TXシーケンスは表示されている最新の5つのトランザクションに基づいています)
Log Record Type Op TX seq
---------------------------------------- -- -----------
======>Checkpoint Record 17 5
Begin Xact 0 5
Delete Extent Log Record 77 5
B-Tree Non-Leaf Delete 72 5
Delete Log Record for DOL Table 66 5
B-Tree Non-Leaf Delete 72 5
Delete Log Record for DOL Table 66 5
B-Tree Non-Leaf Delete 72 5
Delete Log Record for DOL Table 66 5
B-Tree Non-Leaf Delete 72 5
Delete Log Record for DOL Table 66 5
B-Tree Non-Leaf Delete 72 5
Delete Log Record for DOL Table 66 5
Deallocate Data Page 21 5
B-Tree Non-Leaf Delete 72 5
B-Tree Non-Leaf Delete 72 5
Delete Log Record for DOL Table 66 5
Deallocate Data Page 21 5
B-Tree Non-Leaf Delete 72 5
Delete Log Record for DOL Table 66 5
B-Tree Non-Leaf Delete 72 5
B-Tree Non-Leaf Delete 72 5
B-Tree Non-Leaf Delete 72 5
Delete Log Record for DOL Table 66 5
B-Tree Non-Leaf Delete 72 5
Delete Log Record for DOL Table 66 5
Update Record for DOL Table 65 5
B-Tree Non-Leaf Delete 72 5
Delete Log Record for DOL Table 66 5
B-Tree Non-Leaf Delete 72 5
Delete Log Record for DOL Table 66 5
End Xact 30 5
Begin Xact 0 4
End Xact 30 4
======>Checkpoint Record 17 3
以前に質問で述べたように、Sybase ASEのtruncate table
の処理方法を他の特別な属性と異なるように検索しているときに、 " 切り捨てと削除の両方を使用する理由 "というタイトルの古い投稿を見つけました。 -と呼ばれるminimally logged
Sybase Transact-SQL(T-SQL)操作(例select into
)。
回答の1つに、Microsoft SQL Serverの機能(truncate table
がトランザクション内で処理され、これがログに記録され、ロールバックに適したものとなる)が、Sybase ASEにも同様に当てはまるという抽出に気づきました。
2つの点を明確にするために、古い質問を参照して新しい質問を作成しました。
ポイント1
truncate table
を置くことはできませんtruncate table
は、データ行の削除に関するログレコードを生成せず、データとインデックス(存在する場合)ページが単に割り当て解除され、ページは未使用としてマークされますこれとは対照的に、drop table
は、小さなトランザクションログイベントでtruncate table
と同等の処理を行うシステムカタログ(sysobjects
、sysindexes
など)を更新します(空のBEGIN Xact
/END Xact
ブラケットとしてのログレコード監査)。
重要:truncate
テーブルは2つの点で一意です
select into/bulkcopy/pllsort
"を最初に有効にしなくても、データベースで使用できます(他のminimally logged
T-SQL
コマンドとは異なります)dump transaction
minimally logged
コマンドとは異なり、データベースに対する後続のT-SQL
コマンドを妨げません-この制限の回避策は、フルまたはcumulative
DBを取ることですダンプしてリセット)ポイント2
truncate table
に大きな効率向上はありませんが、トランザクションログアクティビティを詳しく調べると、truncate table
の実行時にログ関連の小さなオーバーヘッドが明らかになっているようです(これはありません)。質問の本文のsyslogs監査証跡に示されているように、drop table
を処理せずにtruncate table
を続行します)。