• ベストアンサー

一時表領域について

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

  • Oracle
  • 回答数3
  • ありがとう数7

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

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.2

一度大きくなってしまった表領域を小さくすることはできないので、再作成するしかありません。 再作成の方法は、Oracle 9i 以降を使っているのであれば、 CREATE TEMPORARY TABLESPACE temp_new TEMPFILE 'path' SIZE xxxM; ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_new; DROP TABLESPACE temp_old INCLUDING CONTENTS; で再作成が可能だったと思います。

real_neo
質問者

お礼

回答ありがとうございます。 再作成が必要なことはわかりましたが、ご紹介いただいた方法では再作成できませんでした。 ALTER TABLESPACEが失敗します。

その他の回答 (2)

  • entree
  • ベストアンサー率55% (405/735)
回答No.3

> ALTER TABLESPACEが失敗します。 よく内容を確認してください。 デフォルト一時表領域の変更は、 ALTER TABLESPACE ...... ではなく、 ALTER DATABASE ...... です。あと、エラーが発生したのであれば、どういうエラーなのかをちゃんと書いていただかないと、アドバイスのしようがありません。

real_neo
質問者

お礼

ALTER DATABASE を実行すると、うまくいきました。 ありがとうございました。

回答No.1

一時表領域のエクステントは開放されない=縮小不可です。よって、サイズを小さくするには「新しい一時表領域の作成」→「旧一時表領域の削除」となります。実際の手順は 1.ALTER TABLESPACE TEMP ADD TEMPFILE [新DBファイル名](必要であればAUTOEXTEND OFFも) 2.ALTER DATABASE TEMPFILE [旧DBファイル名] OFFLINE 3.ALTER DATABASE TEMPFILE [旧DBファイル名] DROP INCLUDING DATAFILES です。ただし、実際の環境は手元にありませんので確認はしていません。また、あわせて初期化パラメタのSORT_AREA_SIZEの見直しもお勧めします。

real_neo
質問者

お礼

回答ありがとうございます。 ご紹介いただいた方法では再作成できませんでした。 ALTER TABLESPACE ~ OFFLINEが失敗します。

関連するQ&A

  • UNDO表領域の拡張について

    Oracle9iにてUNDO表領域を自動拡張ではないため手動にて拡張(512M→1024M)しようとしております。 UNDO表領域:/oradata/undotbs01.dbf 表領域をオフライン(alter tablespace '/oradata/undotbs01.dbf' offline;)にすることなく以下のSQL文のみで拡張することは可能でしょうか? SQL> alter database datafile '/oradata/undotbs01.dbf' resize 1024M; ご教授の程、宜しくお願い致します。

  • 一時表領域の見積

    納品したWebシステムの性能試験で、SELECT実行時に一時表領域の容量不足というSQLエラーが発生しました。 7.1GBにリサイズしても状況は変わらなかったそうです。 一時表領域は自動拡張なしです。 ユーザからSQLの修正を求められたので、修正して自社環境ではありますが、Webシステムの各機能ごとに一時表領域の拡張を監視して、最終的な最大値を調査しました。 そこで、400MBという結果が出たのですが、Webシステムを複数ユーザで並列に使用することを考慮すると、これが妥当なのかどうかが分かりません。 一時表領域容量の見積は可能なのでしょうか? 見積もれない場合は、ユーザに何と回答したら良いでしょうか?

  • 表領域の拡張について

    表領域の拡張について教えてください。 以前、以下のようなSQL文で表領域(WEB_DATA)を作成しました。 -------- CREATE TABLESPACE WEB_DATA DATAFILE '/home1/oracle/app/oracle/oradata/orcl/WEB_DATA.dbf' SIZE 500M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE 1000M EXTENT MANAGEMENT LOCAL AUTOALLOCATE; -------- 最近データ容量も増えており以下のように約800Mほどとなっております。 -------- -rw-r----- 1 oracle oinstall 806363136 11月 6日 08:18 WEB_DATA.dbf -------- よって表領域の拡張を考えております。 そこで、考えられる方法として以下の2つがあると思われますが、どちらを選択するほうが良いのでしょうか? (1)alter tablespace文の add datafile句 (2)alter database文の resize句 両者のメリット・デメリットがイマイチよく分かりません。 (パフォーマンス的にどちらが良いなどもあるのでしょうか?) また表領域のmazsizeの上限値は通常どれほどにしておくべきなのでしょうか? 環境は以下の通りです。 OS:Solaris8 DB:Oracle9i 以上、宜しくお願い致します。

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

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

  • 表領域の作成について

    表領域を作成してインポートしたら下記のエラーが出力されて困っています。 表領域の作成の仕方が駄目でエラーが出力されてしまったのでしょうか。 下記のCREATE TABLESPACE文で表領域を作成しています。 ---------------------------------------------------------------------- CREATE TABLESPACE "T_DAT" BLOCKSIZE 8192 DATAFILE 'D:\oracle\oradata\ora92\DAT_01.DBF' SIZE 32767M, 'D:\oracle\oradata\ora92\DAT_02.DBF' SIZE 32767M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M SEGMENT SPACE MANAGEMENT AUTO; ---------------------------------------------------------------------- コマンドプロンプトでimpコマンドを実行したら、下記のエラーなどが出力されました。 ---------------------------------------------------------------------- IMP-00003: Oracleエラー1659が発生しました。 ORA-01659: nを超えるMINEXTENTSを表領域T_DATに割当てできません。 IMP-00003: Oracleエラー1658が発生しました。 ORA-01658: 表領域T_DATにセグメント用のINITIALエクステントを作成できません。 ---------------------------------------------------------------------- 何がいけないのかが正直わかりません。 申し訳ありませんがアドバイスいただけませんでしょうか。 宜しくお願いします。

  • UNDO表領域

    お世話になります。 Oracle9i 以降のUNDO表領域に関してお聞きしたいのですが。 Create tablespace 文でUndo表領域を作成できますが、 複数作成するメリットなどはどのようなことが考えられるのでしょうか? インストール時に存在する、UNDO表領域のサイズを大きくすれば いいような気がするのですが。 以上 よろしくお願いします。

  • 表領域拡張の必要性

    Windows2003サーバ上でORACLE10g リリース2を使っています。 ORACLEのインストールは、ほぼデフォルト設定にしてあります。 ORACLEのエンタープライズマネージャで表領域を見ると SYSAUX  サイズが550Mで使用量が540M、セグメント領域の管理=自動 SYSTEM  サイズが560Mで使用量が555M、セグメント領域の管理=手動 となっていました。 オーバーフローしないか心配なのですが、セグメント領域を拡張する必要はあるのでしょうか?。 ちなみにテーブルの表領域はUSERS で残りも60%以上あります。 よろしくお願いいたします。

  • 表と表領域とデータファイルについて

    よろしくお願いします。 表と表領域とデータファイルの関係を一発で導く方法を 教えてください。 今のところ、下記2つに分けているので、1つのSQLとしたいです。 データベースは、Oracle9i(9.2.0.8.0)です。 どうぞよろしくお願いします。 1. ------------------------------ SQL> select table_name, tablespace_name from all_all_tables 2 where table_name = 'SAMPLE' 3 ; ------------------------------ 2. ------------------------------ SQL> select tablespace_name, file_name from DBA_DATA_FILES 2 where tablespace_name = 'USERS' 3 ; ------------------------------

  • 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 ~" で拡大できたと思うのですが、 方法がはっきり分かりません。 どなたかご存知の方、また、このエラー自体の原因が 分かる方、いらっしゃったらお願いします。

  • oracle9iでの表領域名変更について

    Oracle9iでの表領域名の変更方法について教えていただけませんでしょうか。 通常のデータを格納している表領域です。(一時やsystemではありません) 宜しくお願いします。