タグ付けされた質問 「alter-table」

既存のテーブルオブジェクトを変更するために使用されるSQLステートメント。

5
ALTER COLUMN to NOT NULLが大量のログファイルの増加を引き起こすのはなぜですか?
データ用にディスク上に4.3 GBを使用する64m行のテーブルがあります。 各行は約30バイトの整数列に加えて、NVARCHAR(255)テキスト用の可変列です。 data-typeのNULLABLE列を追加しましたDatetimeoffset(0)。 次に、すべての行でこの列を更新し、すべての新しい挿入でこの列に値が配置されるようにしました。 NULLエントリがなくなったら、このコマンドを実行して新しいフィールドを必須にしました。 ALTER TABLE tblCheckResult ALTER COLUMN [dtoDateTime] [datetimeoffset](0) NOT NULL その結果、トランザクションログサイズが大幅に増加しました。スペースがなくなるまで、6GBから36GBを超えました。 SQL Server 2008 R2がこの単純なコマンドでこのような大きな成長をもたらすために一体何をしているのか、誰にもわかりませんか?

1
MySQLでテーブルを交換するにはどうすればよいですか?
時々foo計算されるいくつかの統計を含むテーブルがあるとします。他のクエリで頻繁に使用されます。 だからこそ、最新の統計を計算foo_newし、計算の準備ができたらそれらを交換したいのです。 私はそれをできた ALTER TABLE foo RENAME foo_tmp; ALTER TABLE foo_new RENAME foo; しかしfoo、テーブルがないときにクエリがこれらの2行の間にテーブルを必要とする場合はどうなりますfooか?どういうわけかロックする必要があると思います...または別の方法がありますか?

3
実動テーブルへの列の追加
SQL Server 2008 R2の大規模な運用テーブルに列を追加する最良の方法は何ですか?オンラインのMicrosoftの本によると: ALTER TABLEで指定された変更はすぐに実装されます。変更がテーブル内の行の変更を必要とする場合、ALTER TABLEは行を更新します。ALTER TABLEは、テーブルのスキーマ変更ロックを取得して、最後に非常に短いSCH-Mロックを必要とするオンラインインデックス操作を除き、変更中に他の接続がテーブルのメタデータを参照しないようにします。 (http://msdn.microsoft.com/en-us/library/ms190273.aspx) 数百万行の大きなテーブルでは、これには時間がかかる場合があります。停止することが唯一の選択肢ですか?このような状況に対処する最善の方法は何ですか?

4
空きディスク容量なしでVACUUM FULLを実行する必要があります
サーバー上のhdスペースの90%近くを占めるテーブルが1つあります。スペースを空けるために、いくつかの列をドロップすることにしました。しかし、スペースをOSに戻す必要があります。ただし、問題は、VACUUM FULLを実行し、テーブルのコピーを作成するための十分な空き領域がない場合にどうなるかわからないことです。 VACUUM FULLは使用すべきではないことを理解していますが、このシナリオでは最良の選択肢であると考えました。 任意のアイデアをいただければ幸いです。 PostgreSQL 9.0.6を使用しています

2
列をNOT NULLからNULLに変更する-内部で何が起こっているのでしょうか?
2.3B行のテーブルがあります。列をNOT NULLからNULLに変更したいと思います。列は1つのインデックスに含まれます(クラスター化インデックスまたはPKインデックスではありません)。データ型は変更されていません(INTです)。ただnullability。ステートメントは次のとおりです。 Alter Table dbo.Workflow Alter Column LineId Int NULL 操作は、停止する前に10を超えます(ブロッキング操作であり、時間がかかりすぎたため、完了まで実行することすらまだできていません)。テーブルを開発サーバーにコピーして、実際にかかる時間をテストします。しかし、NOT NULLからNULLに変換する際にSQL Serverが内部で何をしているのかを誰かが知っているのか興味がありますか?また、影響を受けるインデックスを再構築する必要がありますか?生成されたクエリプランは、何が起こっているのかを示していません。 問題のテーブルはクラスター化されています(ヒープではありません)。

6
ライブ本番データベースのテーブルを変更する
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 ほとんどの「人気のある」(MySQL、Postgres ...)データベースシステムは、稼働中の本番データベース上のテーブルの変更(列のタイプの追加、削除、変更など)をどのように処理しますか? 私が知って正しい方法は、バックアップのすべてのスケジュールのダウンタイムにあり、その後、変更を行うのですか。 しかし... ...現在のデータベースシステムは、これらのことを何も停止することなく「オンライン」で行うことをサポートしていますか (変更または削除されたばかりの列を参照するクエリを遅らせるだけの場合があります) そしてALTER TABLE...、ライブ実行中のデータベースで実行するとどうなりますか?これが発生すると、すべてが停止しますか?データが破損することはありますか?等 繰り返しますが、これらは私が遭遇するものであるため、私は主にPostgresまたはMySQLに言及しています。 (そして、はい、「正しい方法」を行う前にこれをしなければならなかったときはいつでも、物事をバックアップし、ダウンタインをスケジュールします。ダーティ」または「クイック、ライブ、ダーティ」スキーマ変更を実際にサポートしているDBシステムがある場合) 誰かがFacebookスクリプトからMySQLのオンラインスキーマ変更を提案しました(ここにチュートリアルとソースがあります)...それを行うための「ハッキング」方法のセットを自動化する良い方法のようです...誰もがそれを使用したことがあります生産に似た何か?

3
最小のダウンタイムで大きなテーブルにrowversion列を追加するにはどうすればよいですか
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 SQL Server 2008以降を使用して、rowversion列を大きなテーブルに追加したいのですが、単純に ALTER TABLE [Tablename] ADD Rowversion [Rowversion] NOT NULL その後、更新のためにテーブルが長すぎます。 このダウンタイムを減らすためにどのような戦略を使用できますか?何でも検討します。もちろん、単純であればあるほど良いのですが、どのような戦略も検討します。 私の考えでは、最後の手段として、トリガーによって維持されるコピーステージングテーブルを維持してから、ステージングテーブルを元のテーブルにsp_renameできると考えています。しかし、私はもっとシンプルで簡単なものを望んでいます。

4
メモリ最適化テーブル-メンテナンスが本当に難しいのでしょうか?
私は、MS SQL 2012から2014へのアップグレードの利点を調査しています。SQL2014の大きなセールスポイントの1つは、クエリを超高速にするメモリ最適化テーブルです。 メモリ最適化テーブルには、次のようないくつかの制限があることがわかりました。 いいえ(max)サイズのフィールドありません 行ごとに最大1 KB timestampフィールドなし 計算列はありません UNIQUE制約なし これらはすべて迷惑と見なされますが、パフォーマンス上のメリットを得るために本当に回避したい場合は、計画を立てることができます。 実際のキッカーは、ALTER TABLEステートメントを実行できないという事実であり、インデックスのリストにフィールドを追加するたびに、このリマロールを実行する必要がINCLUDEあります。さらに、ライブDBのMOテーブルにスキーマを変更するには、ユーザーをシステムから締め出す必要があるようです。 マイクロソフトがこの機能にこれほど多くの開発資金を投資したとは信じられないほど、これはまったくとんでもないことであり、維持するのは非常に実用的ではありません。これは、私がスティックの間違った終わりを得たに違いないという結論に私を導きます。メモリを最適化したテーブルについて誤解していたため、実際よりも保守がはるかに困難であると思われました。 それで、私は何を誤解しましたか?MOテーブルを使用しましたか?それらを使用および保守するのに実用的な何らかの種類の秘密のスイッチまたはプロセスがありますか?

3
ALGORITHM = INPLACEよりもALGORITHM = COPYを好むのはなぜですか?
MySQL 5.6にはオンラインDDLが導入されたため、ALTER TABLEコマンドにはオプションでいずれALGORITHM=INPLACEかをALGORITHM=COPY指定または指定できます。オンラインDDLの概要では、デフォルトでINPLACEは可能な限り使用され、アルゴリズムが安価であることを(まったく述べずに)示していINPLACEますCOPY。 それではALGORITHM=COPY、ALTER TABLEステートメントで指定しなければならない理由は何ですか?


3
IDENTITY値をリセット
IDENTITY列のあるテーブルがあります。開発中に、時々行を削除し、再度追加します。しかし、IDENTITY値は常に増加し続け、それらを再度追加したときに1から始まっていませんでした。私のIDは68から> 92になり、これによりコードがクラッシュします。 IDENTITY値をリセットするにはどうすればよいですか?

2
ALTER TABLE上のデータベース「凍結」
私たちの本番環境は、今朝、テーブルを変更し、実際に列を追加するときにしばらく凍結しました*。 問題のあるSQL:ALTER TABLE cliente ADD COLUMN topicos character varying(20)[]; *システムへのログインには、まったく同じテーブルからの選択が必要であるため、alterテーブルでログインすることはできません。システムが通常の操作を再開できるようにするには、実際にプロセスを強制終了する必要がありました。 テーブル構造: CREATE TABLE cliente ( rut character varying(30) NOT NULL, nombre character varying(150) NOT NULL, razon_social character varying(150) NOT NULL, direccion character varying(200) NOT NULL, comuna character varying(100) NOT NULL, ciudad character varying(100) NOT NULL, codigo_pais character varying(3) NOT NULL, …

1
nvarchar列のサイズを変更する場合、一意のインデックスを削除する必要がありますか?また、インデックスの再作成時にテーブルがロックされますか?
私たちのデータベースには、次のような多かれ少なかれ大きなテーブルがあります。 CREATE TABLE dbo.production_data ( pd_id BIGINT PRIMARY KEY, serial NVARCHAR(16) NOT NULL UNIQUE, ... ); しかし、今ではシリアルフィールドのサイズが小さくなっているので、32に変更したいと思います。VisualStudioスキーマ比較ツールは、これを行うことを提案します。 DROP INDEX ux_production_data_serial ON dbo.production_data; GO ALTER TABLE dbo.production_data ALTER COLUMN serial NVARCHAR(32) NOT NULL; GO CREATE INDEX ux_production_data_serial ON dbo.production_data(serial ASC); これは本当に必要ですか?それとも、これを行う超保存的な方法のようなものですか? また、一意のインデックスを再作成すると、テーブルがロックされますか?これは大きな問題になるためです(テーブルには3,000万行あり、インデックスの再作成にはかなり時間がかかると思います)。これは、次のメンテナンスウィンドウが数か月先になるためです。私の選択肢は何ですか?

3
インデックス付き列を持つ大きなテーブルのALTER TABLE
VARCHAR(20)列を持つ大きなテーブルがあり、それをVARCHAR(50)列になるように変更する必要があります。通常、この特定のテーブルでALTER TABLEを実行(TINYINTを追加)するのに約90〜120分かかります。そのため、データベースのユーザーに影響を与えないために、土曜日または日曜日の夜にしかできません。可能であれば、その前にこの変更を行いたいと思います。 列にもインデックスが付けられますが、列の長さを変更した後にインデックスを再構築する必要があるため、ALTER TABLEが遅くなると思われます。 Webアプリは、MySQLレプリケーション環境(26個のスレーブと1個のマスター)でセットアップされます。一度どこかで、1つの方法は最初に各スレーブでALTER TABLEを実行し(ユーザーへの影響を最小限に抑える)、次にマスターでこれを行うことを思い出しますが、それからALTER TABLEコマンドをスレーブに複製しようとしませんか? 私の質問は次のとおりです。ユーザーの混乱を最小限に抑えてこのテーブルを変更する最良の方法は何ですか? 編集:テーブルはInnoDBです。

3
フルテキストインデックスのあるテーブルで、単純なALTER TABLEコマンドが非常に長い時間がかかるのはなぜですか?
列にフルテキストインデックスが作成された大きな名前(〜6700万行)の名前と値のテーブルがありDataValueます。 次のコマンドを実行しようとすると: ALTER TABLE VisitorData ADD NumericValue bit DEFAULT 0 NOT NULL; 1時間10分間実行されVisitorDataますが、約6,700万行を含むテーブルでは完了しません。 なぜこれに時間がかかり、完了しないのですか? 私はそれについて何ができますか? 表の詳細は次のとおりです。 CREATE TABLE [dbo].[VisitorData]( [VisitorID] [int] NOT NULL, [DataName] [varchar](80) NOT NULL, [DataValue] [nvarchar](3800) NOT NULL, [EncryptedDataValue] [varbinary](max) NULL, [VisitorDataID] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_VisitorData_VisitorDataID] PRIMARY KEY CLUSTERED ( [VisitorDataID] ASC ) WITH (PAD_INDEX …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.