他の唯一のオプションは、とにかく多くのRDBMSシステムが行うことを手動で行うことです...
-新しいテーブルを作成します
その後、古いテーブルの内容を一度にチャンクにコピーできます。ソーステーブルのINSERT/UPDATE/DELETEには常に注意してください。 (トリガーで管理できます。これにより速度が低下しますが、ロックではありません...)
終了したら、ソーステーブルの名前を変更してから、新しいテーブルの名前を変更します。できればトランザクションで。
終了したら、そのテーブルを使用するストアドプロシージャなどを再コンパイルします。実行計画はおそらく無効になります。
編集:
この制限が少し貧弱であるというコメントがいくつかあります。それで、なぜそれがどのようになっているのかを示すために、私はそれに新しい視点を置くと思いました...
- 新しいフィールドを追加することは、すべての行で1つのフィールドを変更するようなものです。
- フィールドロックは行ロックよりもはるかに難しいので、テーブルロックは気にしないでください。
- 実際にはディスク上の物理構造を変更しているので、すべてのレコードが移動します。
- これは実際にはテーブル全体のUPDATEに似ていますが、より大きな影響があります...