2009-12-01 13 views
30

Oracleの一時表領域をどのように縮小できますか?なぜアプリケーションがデータベースに1つのスキーマしかなく、データ・テーブルのスペース・サイズが2 GBで、索引テーブルのスペース・サイズが使用される1 GBなので、最大25 GBまで増えています。Oracleでtemp表領域を縮小するにはどうすればよいですか?

+0

どのOracleのバージョンですか? – BradC

+0

あなたは自分の答えを見たことがありますか?他に何が必要なのだろうか? –

答えて

94

Oh My Goodness!私の一時的なテーブルスペースのサイズを見てください! またはOracleで一時表領域を縮小する方法。

SQL> SELECT tablespace_name, file_name, bytes 
2 FROM dba_temp_files WHERE tablespace_name like 'TEMP%'; 

TABLESPACE_NAME FILE_NAME         BYTES 
----------------- -------------------------------- -------------- 
TEMP    /the/full/path/to/temp01.dbf  13,917,200,000 

一時表領域が大きいので、なぜあなたが聞いている最初の質問は次のとおりです。

はい、私は私の一時表領域がどのように大きな参照するクエリを実行しました。 あなたの頭の上からこれに対する答えを知ることができます。 という大規模なクエリのため、誤った並べ替えで実行した可能性があります(私は を2回以上行っています)。それは他の例外的な状況が原因である可能性があります。その場合、 の場合は、一時的な 表スペースを縮小して人生を過ごすだけです。

しかし、わからない場合はどうすればいいですか?縮小する前に、大規模な表領域の原因を調査する必要があります( )。これが 定期的に発生した場合、データベースに必要なスペースが必要になる可能性があります。

V$TEMPSEG_USAGE 

動的パフォーマンス・ビューは、原因を決定する上で非常に役立ちます。

多分あなたは原因を気にしないで、縮める必要があります。 これはあなたの仕事の3日目です。データベース内のデータは、データと一時表領域が13GiBの場合は、わずか200MiBの です。縮小して移動してください。 それが再び成長するなら、私たちは原因を調べます。その間、私は がそのディスクボリューム上にありません。スペースが必要です。

これを縮小してみましょう。実行中のOracleのバージョン と、一時表領域の設定方法は少し異なります。
オラクルは恐ろしい間違いを避けておくことをお勧めします コマンドを試してみましょう。もしうまくいかない場合は、 を新しい方法で縮小します。

まず、データファイルを縮小しようとします。もしそれができたら、 のスペースが戻ってきて、明日なぜそれが成長したのか心配することができます。

SQL> 
SQL> alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M; 
alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M 
* 
ERROR at line 1: 
ORA-03297: file contains used data beyond requested RESIZE value 

は、エラーメッセージによっては、ファイルの現在のサイトよりも小さいサイズの異なる でこれを試してみたいことがあります。私はこれで成功した を制限しました。一時表領域 がファイルの先頭にあり、サイズが より小さい場合、Oracleはファイルを圧縮します。いくつかの古いオラクルのドキュメント(これを修正したもの)は、 というコマンドを実行するとエラーメッセージが表示され、縮小することができるサイズが であると述べています。私がDBAとして働き始めた頃には、これは ではありませんでした。あなたはただコマンドを推測して再実行しなければならず、 のコマンドを実行してそれがうまく動作するかどうかを確認する必要があります。

いいえ。それはうまくいかなかった。これはどう。

SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M; 

11g(Maybeeは10gも)の場合はこれです!それが動作する場合は、 に前のコマンドに戻って、もう一度試してみるといいでしょう。

しかし、それが失敗したらどうしますか?一時表領域がデータベースのインストール時に設定されたデフォルトの一時的な である場合は、 の作業が必要になることがあります。この時点で、私は実際に スペースバックが本当に必要かどうか再評価します。すべてのディスク容量が$ X.XXのGiBしかかかりません。通常、私は生産時間中に をこのように変更したくありません。それは2AM にもう一度働いていることを意味します! (私は実際には2AMで働くことに を反対しています - それはちょうど...でも私は寝るのが好きです。そして、私の妻 は午前2時に自宅にいるのが好きです...午前4時にダウンタウンの街を歩いていません 私が3時間前に車を駐車した場所を覚えておいてください。私はその "在宅勤務"について のことを聞いたことがありますが、私はちょっと心配してインターネット接続 が失敗するでしょう - すべての人々がデータベースを使用するように 午前中に現れる前に。)

[OK]を...バック深刻なもの... にあなたが縮小したいの一時表領域がデフォルト 一時表領域の場合は、必要があります最初に作成する新しい一時的な 表スペースをデフォルトの一時表領域として設定し、次に古いデフォルトの一時表領域 をドロップして再作成します。後で 作成された2番目の一時テーブルを削除します。

SQL> CREATE TEMPORARY TABLESPACE temp2 
2 TEMPFILE '/the/full/path/to/temp2_01.dbf' SIZE 5M REUSE 
3 AUTOEXTEND ON NEXT 1M MAXSIZE unlimited 
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M; 

Tablespace created. 

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2; 

Database altered. 

SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES; 

Tablespace dropped. 


SQL> CREATE TEMPORARY TABLESPACE temp 
2 TEMPFILE '/the/full/path/to/temp01.dbf' SIZE 256M REUSE 
3 AUTOEXTEND ON NEXT 128M MAXSIZE unlimited 
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M; 

Tablespace created. 

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp; 

Database altered. 

SQL> DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES; 

Tablespace dropped. 

これらのうちの1つが役立ちます。

+0

ちょうどメモ - 旋回スペースは11gで導入され、10gでは利用できません。すべてのオプションを本当に徹底的に書き留めてくれてありがとう! –

+1

インターネット上の多くの記事や記事は、非常に複雑な手順を提案しています。これは私が見つけた最もシンプルなものでした! –

+1

この明快で正確な説明と解決策をありがとうございました。それは今のところインターネット上で見つけられた最高のものです。 –

0
alter database datafile 'C:\ORA_SERVER\ORADATA\AXAPTA\AX_DATA.ORA' resize 40M; 

それが解決しない場合:古い表領域が

  • 古い表領域を削除
  • を使用できなくなるまで

    • は、新しい一時表領域
    • 待つこと
    • スイッチ新しい表領域を作成します。
    5

    テーブルパを管理するためのオプション8iで始まるバージョンよりもcesの方がはるかに優れています。これは、一時表領域(つまり、ローカル管理の一時ファイル)に適切なタイプのファイルを使用している場合に特に当てはまります。

    だから、それは

    alter tablespace <your_temp_ts> shrink space keep 128M; 
    

    Oracleのオンラインドキュメント

    はかなり良いです... 128メガに表領域を縮小します。このコマンドは、のように単純である可能性があります。 Find out more.

    編集

    OPがデータベースの以前のバージョンを持っていると思われます。以前のバージョンでは、個々のデータファイルのサイズを変更する必要がありました。だから、まず、ファイル名を見つけてください。それを行う必要があり、これらのクエリのいずれかまたは他の...

    select file_name from dba_data_files where tablespace_name = '<your_temp_ts>' 
    /
    
    select file_name from dba_temp_files where tablespace_name = '<your_temp_ts>' 
    /
    

    は、このコマンドでそのパスを使用します。

    alter database datafile '/full/file/path/temp01.dbf' resize 128m 
    /
    
    +0

    SQL> alter tablespace temp縮小スペースは128Mを維持します。 alter tablespace temp縮小スペース128Mを維持 * エラー1行目: ORA-02142:ALTER TABLESPACEオプションがないか無効です –

    1

    あなたは一時的な保管スペースを必要としているので、それはおそらく、増加されますデカルト演算または大分類演算に変換する。

    動的パフォーマンスビューV$TEMPSEG_USAGEは原因の診断に役立ちます。

    +0

    使用後に表示されますか? –

    +0

    そうは思わないはずです。 –

    +0

    別の理由として、グローバル一時表の使用量が多すぎる可能性があります。 –

    2

    使用するOracleのバージョンを記述しておく必要があります。 Oracle 11g以外のものを使用する可能性が最も高いので、一時表領域を縮小できません。

    代替:

    1)alter database tempfile '[your_file]' resize 128M;おそらく)
    2失敗ドロップし、表領域を再作成します。縮小する一時表領域がデフォルトの一時表領域である場合は、最初に新しい一時表領域を作成し、それをデフォルトの一時表領域として設定し、古いデフォルトの一時表領域を削除してから再作成する必要があります。その後、作成された2番目の一時表をドロップします。 3)は、Oracle 9iおよび高いために、あなただけの一時ファイル(複数可)を削除して

    すべては非常に詳細にhereに記載されている新しいもの(複数可)を追加することができます。ので、ここでそれが再び、それはすでにリンクされたhttp://databaseguide.blogspot.com/2008/06/resizing-temporary-tablespace.html
    、多分あなたはそれを逃した:


    は、このリンクを参照してください。

    0

    私は将来的に再びストレージを再利用する必要がある場合には、代替温度を落とすと気にしないでください...

    1. 一時グループセットのデフォルトのスタンドアローンする一時
    2. はしばらく待って、テンポラリグループのメンバのサイズを変更する
    3. デフォルトのテンポラリグループに戻す
    4. 一時的にスタンドアロンのサイズを変更する。最後のステップを実行するための急いではありません
    関連する問題