• ベストアンサー

運用中のALTER TABLE

運用中でアクセスがあるテーブルに ALTER TABLEで項目を追加したいのですが 問題ありますでしょうか? オラクル9iです。 宜しくお願い致します。

  • sonar
  • お礼率57% (27/47)
  • Oracle
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

(1)ALTER TABLE文は表ロックがかかります(自身なし(^^;)。 SELECT ~ FOR UPDATE NOWAITで実行するSQL文等があるとリソースビジー (ORA-00054)が戻る場合があります。 (2)テーブルを変更することによっていろいろ(プロシージャなどが) 無効(INVALID)になる場合がありますので、オブジェクトの状態を確認 したほうが良いと思います。 (3) DEFAULT指定がALTER TABLE文にある場合、undo領域が圧迫 (領域不足)したり、ALTER TABLEがなかなか完了しなかったりします。 (私はコレでハマリました(^^;) 今のところ、思いつくのはコレだけですが、いずれにしろテストできる 環境で確認されたほうが良いと思います。

sonar
質問者

お礼

ご回答ありがとうございました。 いろいろ項目を挙げていただき勉強になりました。 該当するものはなかったのでホッとしております。

その他の回答 (1)

  • Yeti21
  • ベストアンサー率47% (396/830)
回答No.2

単に項目の追加だけなら特に問題はありません。 厳密に言えば表領域のサイズ計算の目算が若干変わってくるくらいでしょうか?

sonar
質問者

お礼

ご回答ありがとうございます。 表領域のアドバイスもありがとうございました。

関連するQ&A

  • alter tableすると、処理が止まってしまい困っています

    表題の件で質問させて下さい。 以前までは特に問題なく、alter tableなどで列を追加出来ていたのですが、ここ最近、データ量が増えてきたためか、列追加にすごく時間がかかってしまっています。 それが原因なのかはわからないのですが、alter tableで列を追加すると、処理が止まってしまい、プロセスをkillして、とりあえず対処する・・・ と言うような対応が続いています。 調べたところ、alter table はテーブルロックがかかってしまうらしいのですが、これは begin でトランザクションを開始させても特に意味はないのでしょうか? いろいろと調べてはいるのですが、基本的な事は見つかるのですが、運用する時にどういった注意点があるか等が今いち、調べ切れませんでしたので、どんな運用をしていけばいいのかご教授して頂けると助かります。 宜しくお願いいたします。

  • Access2003_ALTER TABLE構文

    Accessのテーブルにフィールドを追加したくSQLで命令文を書いています。 1.[T_テーブル1]というテーブルに[フィールドA]というフィールドを データ型:数値型 フィールドサイズ:単精度浮動小数点型 小数点以下表示桁数:2位まで表示 で追加したいです。 →ALTER TABLE T_テーブル1 ADD COLUMN フィールドA FLOAT4 これに少数点以下桁数を設定するにはどう書けばよろしいでしょうか? 2.[T_テーブル1]というテーブルに[フィールドB]というフィールドを データ型:数値型 フィールドサイズ:長整数型 で追加しました。 →ALTER TABLE T_テーブル1 ADD COLUMN フィールドA INT 「説明」の箇所に説明書きも入れたいのですがここでの設定は可能でしょうか? 以上2点につきましてご指導頂きたくよろしくお願い致します。

  • テーブルの項目名にコメントは付けられる?

    Oracleでは、テーブルの各項目にコメントは付けられないのでしょうか? 例えば、SYOUHIN_C には「商品コード」というコメントを振って、 後でテーブルレイアウト表を作成する際に、取得したいのです。 CREATE TABLE時 や 後からALTER でも構いません。 よろしくお願いします。

  • OracleDBのテーブルのリンクについて

    Oracleテーブルのリンクについて教えてください。 OracleDBのテーブルをACCESS97からリンクして見ているのですが、 OracleテーブルのレコードをACCESSから削除や挿入しようとすると 出来るテーブルと出来ないテーブルがあります。 ACCESSからレコードを選択し、右クリックを押すと通常、そのメニューの 中に「新しいレコード」、「レコードの削除」などが出ますが、 レコードが削除できないテーブルはその項目が灰色になり選択できません。 更新出来ないテーブルと出来るテーブルの違いは何が考えられますか? 申し訳ないですが、宜しくお願い致します。

  • SQL Server(MSDE2000) : ALTER TABLE

    SQL Server(MSDE2000) : ALTER TABLE した項目に対し、直後に UPDATE で値をセットできない 既存のテーブルを仕様変更するため、列を追加し、初期値で埋める SQL 文を書こうとしていますが、うまく動かず、エラーとなってしまい、原因が判らず困っています。 サンプル SQL 文: ------ CREATE TABLE TEST_TABLE ( TEST_FIELD1 SMALLINT, TEST_FIELD2 SMALLINT) INSERT INTO TEST_TABLE VALUES( 1, 2 ) ALTER TABLE TEST_TABLE ADD TEST_FIELD3 SMALLINT UPDATE TEST_TABLE SET TEST_FIELD3 = 3 ------ ※テスト毎に、必ず DROP TABLE TEST_TABLE されている事が前提です。 上記 SQL 文のうち、1行目~3行目までを抜粋して実行すると、ちゃんと CREATE TABLE され、INSERT され、ALTER TABLE される事を確認しました。 ところが、4行目までを一気に実行しようとすると、 ------ SQL実行中に以下のエラーが発生しました。 エラーコード:207 [Microsoft][ODBC SQL Server Driver][SQL Server]列名 'TEST_FIELD3' は無効です。 SQLステータス:S0022 ------ となってしまい、UPDATE で初期値を埋める事ができません。 しかも、UPDATE に失敗するどころか、2行目の INSERT から以降が結果に反映されなくなるという状況に陥ってしまいます。 また、既存のテーブルの仕様変更が目的なので、その状況に近づけるために、まず、 ------ CREATE TABLE TEST_TABLE ( TEST_FIELD1 SMALLINT, TEST_FIELD2 SMALLINT) INSERT INTO TEST_TABLE VALUES( 1, 2 ) ------ を実行し、既存のテーブル(とレコード内容)が存在する状態を作り出された事を、ツール等で確認してから、 ------ ALTER TABLE TEST_TABLE ADD TEST_FIELD3 SMALLINT UPDATE TEST_TABLE SET TEST_FIELD3 = 3 ------ の2行を実行してみると、やはり UPDATE は失敗し、前述と同じエラーが発生します。 またこの場合、ALTER TABLE の実行結果も反映されていません。(つまり、TEST_FIELD3 が列追加されていない) もちろん、ALTER TABLE だけを実行した場合には、ちゃんと列は追加されます。 その後に、UPDATE を実行すれば、ちゃんと追加列に初期値がセットされます。 どうやら、「一回の SQL 文の実行の中で、ALTER TABLE によって新設した列に対しては、UPDATE などでのアクセスはすぐにはできない」のではないか?という状況のようなのです。一回の SQL 文の実行の中において、何らかのトランザクション動作っぽい挙動を感じます。 つまり、ALTER TABLE で追加された列は、その時点ではまだ完全にシステムに認知されていないため、直後の UPDATE 文で認識できずに失敗するのではないか?と。そして、そこでのエラー発生が、ロールバック的に実行した処理をキャンセルしてしまうため、結果として、ALTER TABLE が実行されなかった事になったり、INSERT が実行されなかった事になったりしているのではないか?と思う次第です。 考えられる回避策としては、SQL 文を別々に作成し、個別に実行すれば良いだけの事なのですが、できれば、SQL 文一つにまとめたいと考えています。 どなたか、こういった現象に対する原因・理由の説明、或いは回避策など、何か情報をお持ちの方はいらっしゃいませんでしょうか? 宜しくお願いします。

  • テーブルから項目が読めません

    既存のテーブルに項目を追加したのですが、 そのテーブルを「SELECT *」でよんでも 追加した項目がよめません。 ためしに、Accessにインポートし、同じSQL文を使うとちゃんと追加した項目もとってくるのですが...。 どうしてでしょうか? どなたか、教えてください!!!

  • alter table でチェックボックスの追加

    accessにて・・・ alter table でカラム追加したいのですが・・・ 追加したい属性がチェックボックスなんです・・・・ いろいろやってるのですが、うまくいきません・・・ チェックボックスは追加できないのでしょうか?

  • ACCESS 1クエリでの複数ALTER文

    ACCESS2007で複数テーブルのカラム属性を一括して変更したいのですが、1クエリで複数のALTER文は実行できないのでしょうか? 構文エラーで停止してしまいます。 ALTER TABLE TBL_ID1 ALTER COLUMN SEQ INTEGER; ALTER TABLE TBL_ID2 ALTER COLUMN SEQ INTEGER; どなたか御教え願えないでしょうか。

  • ALTER SESSIONについて

    オラクルのDBに対してあるSQLスクリプトを実行しなければならないのですが、その冒頭に、 alter session set nls_date_format = 'yyyy/mm/dd'; とあり、このコマンドの意味を教えてもらいたいのです。ちなみにスクリプトは、あるテーブルの一行だけを変更するUPDATE文です。末尾にはCOMMIT; があります。 alter session.... は、何らかの日付データを2005/12/05のような形に変更することを意味しているようですが、<何>を設定しているのかが分かりません。 また、このnls_date_formatの値は、DBのどこを検索すれば分かるのでしょうか。スクリプトを流す前の値が'yyyy/mm/dd'ではない場合、スクリプトを流すことで、DBの設定が変わってしまうのでしょうか。 DB初心者です。まとまりのない文章ですみませんがよろしくお願いします。

  • オラクルの運用の全般について

    PostgreSQLのvacuuやMySQLのoptimize tableのようなものは、Oracleに存在するのでしょうか? DBを本格的に使ったことが無いので、全体像がわかりませんが、 オラクルを運用する上で、最適化?など重要事項などまとめた書籍などありますか? オラクル運用者で、作業の大半を占めるものは何でしょうか?