• 締切済み
  • すぐに回答を!

ORACLEのテーブルスペースについて

OS:AIX Ver.4.3 DB:ORACLE(Ver.8.1.6) でSQL*Loaderを実行していたのですが、 "エラーコード -2 STDERR 書込不可"? ↑ (ログを消してしまってはっきりは覚えてないのですが) というエラーログが出力され、その後、ロードする テーブルのTABLESPACEについて "ORA-01536: 表領域 TABLESPACEXXXに対して割り当てられた領域を使い果たしました。" というORACLEのエラーが発生し始めました。 その後、CREATEは上記ORACLEエラーにより実行不可、 その後のINSERTは途中までできていたのですが、途中から 同様のORALCEエラーにより実行不可、 という状態になっています。 (直前まで通常にデータの更新は行えていました) ちなみに該当するTABLESPACEに割り付けられたデータ ファイルにはまだ十分領域が空いています。 該当するTABLESPACEのデータファイルに対する割付領域を "ALTER TABLE ~" で拡大できたと思うのですが、 方法がはっきり分かりません。 どなたかご存知の方、また、このエラー自体の原因が 分かる方、いらっしゃったらお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数482
  • ありがとう数3

みんなの回答

  • 回答No.3
  • soakun
  • ベストアンサー率66% (6/9)

エクステント(EXTENT)が拡張できなくなったために出たエラーかもしれません。 CREATE TABLESPACE時に PCTINCREASE が指定していされていないとデフォルトでは通常の表を格納するのにあまり好ましくない値(50)が設定されているかもしれません。そのため、エクステントを拡張するたびに、前の拡張したエクステントの1.50倍(50%の場合)のエクステントを確保しようとすると思います。 一時的な解決方法は表領域に割り当てるファイルを追加することですが、PCTINCREASE等のパラメータの見なおしも、今後のことを考えると必要になるのではないでしょうか。 # 見なおした後は、できれば一旦表領域のデータを全て EXPORTしたあとで、 # パラメータをきちんと設定してから、IMPORTすると大丈夫だと思います。 マニュアルは SQLリファレンスの CREATE TABLESPACE文・ALTER TABLESPACE文・storage句の部分と管理者ガイドのストレージ部分・表領域の部分についてを参照してみてください。

共感・感謝の気持ちを伝えよう!

  • 回答No.2
  • cse_ri
  • ベストアンサー率29% (74/253)

Tablespaceで連続した空き領域を確保できなくて、"ORA-01536: ~"の エラーが発生した可能性はあります。 しかし修復する方法が今思いつきませんので、てっとり早い対策として "ALTER TABLESPACE"で表領域を拡張する方法を紹介します。 Windows系OSの例ですが、 "ALTER TABLESPACE 表領域名 ADD DATAFILE 'ファイル名' SIZE 拡張サイズM /" と、SQL*Plus等で入力してください。 ファイル名は、パス付きで入力します。 拡張サイズの後ろには、M(メガ)かK(キロ)を付けること。 (サンプル) 表領域 "USERS"を100M拡張します ALTER TABLESPACE "USERS" ADD DATAFILE 'D:\ORACLE\ORADATA\USERS100.DBF' SIZE 100M /

共感・感謝の気持ちを伝えよう!

  • 回答No.1

表領域を安易に拡大する前に原因の追及を。 見かけ上表領域に空きがあっても連続した空き領域が無いと領域不足に陥る事があります。 詳しくはマニュアルをご覧ください。 無ければ、オラクルのサイトからダウンロードしてくる事をオススメします。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • Oracleエラー(権限の関係?)

    <環境>マシン:IBM RX6000 OS:AIX Ver.4.3 DB:ORACLE(Ver.8.1.6) 上記環境で、急にCREATEができなくなりました。 (1)ORA-01536: 表領域 TABLESPACE1に対して割り当てられた領域を使い果たしました。 というエラーが出たのですが、 空き領域を整理し、データファイルを新しく割り付けた後も同様のエラーが 発生しました。 それまでの処理は、 2)AユーザからテーブルデータEXPORT後BユーザへIMPORT ※※補足※※ Aユーザのロール:CONNECT、DBA Bユーザのロール:CONNECT、RESOURCE だったのですが、この状態だとBにIMPORTできない ため、 IMPORT前にBにDBAロールを追加、IMPORT後に削除 3)SQL*Loader実行すると、 エラーコード-2 STDERRに関する何かのエラーが出、 (↑ログが残っていないため詳細不明) その後、再度SQL*Loaderを実行しても、 (1)のエラーが発生して処理終了 4)Bユーザに関して、TABLESPACE1に関しても、その他 のTABLESPACE(TABLESPACE2)に関しても、CREATE不可 INSERTも件数が多いと途中で(1)のエラー発生 ※※補足※※ Aユーザに関しては、TABLESPACE2にはCREATE可能 (TABLESPACE1はテスト未) 最終的には、BユーザにDBAロールを追加して、 実行可能になったのですが、元々はDBAロールを持たせずに 処理できていたので、原因が分かりません。 EXPORT&IMPORT時に「権限をIMPORTするか?>Yes」を選択 したことや、DBAロールを追加&削除したことが影響するので しょうか? ただ、最近Oracleサーバの調子が悪かったため、その影響も あるかもしれません。 全く原因が分かりませんので、心当たりのある方、 よろしくお願いします。

  • 一時表領域について

    システム運用開始前の性能試験で、自動拡張に設定していない一時表領域の容量を超えるOracleのエラー(ORA-1652だったような)が出たため、SQLの修正を行っている最中です。 パフォーマンスチューニングやデータベース容量の設定などには詳しくないため、一時表領域を自動拡張に設定すべきかこのまま自動拡張にしないままにしておくべきかどうかの判断はつかないので、とりあえずそのままにして、一時表領域が容量を超えないようなSQLに修正しようとしています。 ただ、一時表領域のため、容量の見積が出来ず、実際にシステムを動かして確認するしかありません。 自社の環境でもOracleのエラーを再現させることが出来たのですが、一時表領域のサイズが小さくなりません。 これは、エラーのせいなのでしょうか? また、一時表領域を小さく(0バイト)にしたり、いったん削除して再作成したりは出来ないのでしょうか? ALTER TABLESPACE、DROP TABLESPACE 共に実行できませんでした。 ちなみに、この一時表領域は、TEMPORARYタイプでユーザのデフォルトの一時表領域になっています。

  • Oracle テーブルの列削除

    タイトルの通りテーブル(test)の列(retu)を削除したいのですが・・・ Sql*pLUS画面 SQL> alter table test drop(retu); ←この用に入力 alter table test drop(retu) * エラー行: 1: エラーが発生しました。 ORA-00905: キーワードがありません。 となってしまい列を削除できません。 なにか構文の間違いでしょうか?

  • Oracle9iのTEMPORARYファイルのバックアップについて

    初めて質問をさせていただきます。ひでと申します。 今回、Oracle8iのバックアップ環境をOracle9iに改修を行っているのですが、TEMPORARYファイルの扱いで困っています。 Oracle8iではTEMPORARYファイルを下記のコマンドでバックアップ用に待機させる事が出来るのですが、 alter TABLESPACE TEMPORARY begin backup; Oracle9iでは上記コマンドを実行すると下記のエラーが発生します。 --- ORA-03217: TEMPORARY TABLESPACEの変更用オプションが無効です。 原因: 一時表領域の変更に、無効なオプションが指定されました。 処置: 有効なオプション(ADD TEMPFILE、TEMPFILE ONLINE、TEMPFILE OFFLINE)のうちいずれかを指定してください。 --- 調べた所によるとTEMPRARYファイルは「バックアップをする必要なファイル。もしくはバックアップ不可能なファイル」に位置づけられているようなんですが、Oracle9iでバックアップに必要でないと言う確証が持てません。 どなたかご教授頂ければ幸いです。 以上、よろしくお願いいたします。

  • 同じテーブル設計にしたい

    CREATE TABLE 見積データ ( 見積番号 VARCHAR2(7) NOT NULL, 得意先コード VARCHAR2(7), CONSTRAINT 見積データ_KEY PRIMARY KEY ( 見積番号 ) ) STORAGE ( INITIAL 3020K NEXT 302K PCTINCREASE 0 ) TABLESPACE KNDN2; ALTER INDEX 見積データ_KEY REBUILD TABLESPACE KEC_IND STORAGE ( INITIAL 19K NEXT 2K PCTINCREASE 0 ); ******** 上記のようなテーブル設計のSQL文がありますが、私が作ったものではなく都合によりこのテーブルを create table A2 as select from A; 上記のようなコピーを行いました。 あたらしいテーブルでも CONSTRAINT 見積データ_KEY PRIMARY KEY ( 見積番号 ) ) STORAGE ( INITIAL 3020K NEXT 302K PCTINCREASE 0 ) TABLESPACE KNDN2; ALTER INDEX 見積データ_KEY REBUILD TABLESPACE KEC_IND STORAGE ( INITIAL 19K NEXT 2K PCTINCREASE 0 ); この制約と同じものを当てたいのですが、あとから追加するにはこの構文をどのように変えればいいのでしょうか?

  • Oracleのテーブルのフィールドを削除したい

    「総務部.受付ID-1」というフィールドを削除したいと思い以下を実行しました。 alter table VISITOR_SCHDULE drop 総務部.受付ID-1 しかしキーワードがありませんというエラーが表示されてしまいます。 フィールド名に.(ドット)と-(ハイフン)が使用されているからなのでしょうか? 前任者より引継ぎましたので、なぜこのようなフィールド名にしたかは不明です。

  • SQL:全テーブルの現在のデータ数を知りたい。

    環境 DBサーバ : Linux + Oracle9i  クライアント : WindowsXP + Oracle10g の SQLPlus(w) 当方SQL初心者です。以下のSelectを行うSQL文がわかりません。(色々悪戦苦闘しましたが) どなたかご教授下さい。 条件指定する TABLESPACE_NAME に属する、全テーブルの現在のデータ数を、 各テーブルに comment on したコメントと一緒に表示するSQLを教えて下さい。 Select 結果のイメージは以下の感じです。 TABLESPACE_NAME TABLE_NAME Count(*)    Comments ------------------ -------------- ----------- -------------------- 条件としては、  (1) where TABLESPACE_NAME like 'xxxx%' です。 そして TABLESPACE_NAME が異なれば、同じ TABLE_NAME のテーブルがありますが (1)の条件に合致する全てのテーブルを Select したいということです。 すみませんが、お分かりの方、宜しくお願い致します。

  • Oracle のAnalyzeコマンドの発行タイミング

    Oracle8.0.5を使っています。 Analyzeを定期的に実行しているのですが、データ量が多くなってしまい、時間が掛かっています。 現在はCOMPUTEで週1回くらい実行しています。 Analyzeを月1回に変更するとパフォーマンスが低下したりしますか? Oralceマスターの皆様、よろしくお願いします。

  • rawデバイスの表領域を他のrawデバイスに移動させたい

    rawデバイスに表領域を作成しているのですが、負荷分散のため、他のrawデバイスに移したいと考えています。 rawデバイスでない場合はalter tablespaceでできそうなのですが、rawデバイスだとこの方法は使えなさそうです。 新しくcreate tablespaceする以外に何か方法はないでしょうか? Oracleのバージョンは9.2.0.4です。 よろしくお願いします。

  • Oracleの起動時に、マウントしたりしなかったりで困っています。

    初めまして。Oracleの知識が薄く困っております。 よろしくお願い致します。 さて、現象ですがPC起動と同時にOracleが起動するように設定しているのですが、 マウントまで行ったり行かなかったりで困っております。 (起動する度に現象が異なります) Ver:ORACLE V10.1.0.2.0 OS :WindosXP SP2 アラートログを確認しますと、 XXXX started with pid=Y(XXXX=SMONだったりRECOだったり・・・) の直後に、 alter database mount exclusive のコマンドが続く場合は、うまく立ち上がるようです。 しかし、 XXXX started with pid=Y の後に何もない時はマウントできていないようです。 また、 (1) > sqlplus /nolog (2) SQL> connect sys/aaaa@bbbb as sysdba (3) SQL> select status from v$instance; とすると、「STARTED」状態であり、 SQL> alter database mount; SQL> alter database open; とすると、正常に動作するようになります。 oradim.logを確認すると、  ORA-01012: not logged on  ORA-24324: service handle not initialized が出ていますが、どこから調査をすればいいのか暗闇の中です。 お助言頂きますようお願い致します。