• 締切済み

DBA_FREE_SPACEについて

Oracleのビュー、DBA_FREE_SPACEの見方を教えてください。 手持ちのデータベースで、エクステントが発生しているものがあり、気になったのでこれを再構築しようと思いました。 手順としては、 1.現状のデータベースをエクスポート(FULL,COMPRESS=Y) 2.テーブル、インデックスを全てドロップ 3.テーブルスペースをドロップ 4.テーブルスペースを再構築    (容量は余裕があったので、初期に作成時と同じスクリプトで)    (既存のデータファイルは消さずにreuseオプションを指定) 5.テーブル、インデックスをINITIAL EXTENTSを現状の容量より上の値に調整。 6.テーブル・インデックスの再作成 7.データのインポート 8.全オブジェクトの再コンパイル の順に実施しました。 作業後、DBA_SEGMENTSより全テーブル・インデックス にextentが発生していない状態になったことは確認できたのすが、 DBA_FREE_SPACEを見ると、テーブルスペースがあたかも二つに分割されて使われているように 表示がされました。(下記参照) SQL> select * from dba_free_space where tablespace_name ='TB1' TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO --------------- ------- -------- ----- ------ ------------ TB1 9 12981 40960 5 9 TB1 9 13001 103219200 12600 9 この状態による悪影響としてはどのようなものがありますか? また、この状態を解消する方法があれば教えてください。 (CREATE TABLESPACEを"reuse"でやったのがまずかったのでしょうか?) 環境は Oracle8.0.6.0.0(Solaris) Oracle8.1.6.2.0(Solaris) の2点で同様の現象を確認しています。 以上、よろしくお願いします。

みんなの回答

  • paz777
  • ベストアンサー率47% (77/163)
回答No.2

お返事が遅くなりました。 >Oracleの弊害一覧って、どちらかに掲載されているのでしょうか? >上記、弊害について詳細をしりたいのですが。 私こそ勉強不足なのですが、多分「弊害一覧」ってのは無いと思います。 前回、私が回答させていただいた内容は、実体験とマニュアルに 記載されていることの逆説を元にして回答しました。 当件に関しては「管理者ガイド 表領域割当てを管理する」の項目を 参照しました。 (ここにマニュアルの内容を明記することは著作権の関係で出来ない  と思われますので、ご理解下さい。) >またCOALRESCEについては、試してみましたが >DBA_FREE_SPACEに変化ありませんでした。 ってことは、連続した空き領域ではないってことですね。 う~ん、なぜでしょう・・・? ごめんなさい。これ以上は私も分かりません。

hidekino
質問者

お礼

ありがとうございました。上記情報を元に、もう少し掘り下げて調べてみます。

  • paz777
  • ベストアンサー率47% (77/163)
回答No.1

こんにちは。 分かる範囲内で・・・ >この状態による悪影響としてはどのようなものがありますか? 単純に言えば、40K以下のテーブルを作る時にしか、小さい空き部分を使う可能性がない と言う弊害があります。 あくまで可能性なので小さい空き部分が使用されるとは言い切れません。 >また、この状態を解消する方法があれば教えてください。 解消されるかどうかは分かりませんが、以下のコマンドで空き領域を連続する空き領域に することが出来ます。(Oracle 8からの新機能) SQL> ALTER TABLESPACE テーブルスペース名 COALESCE; 空き領域が物理的に連続していれば、このコマンドで1つに統合されるはずです。 お答えできるのは、これくらいです。

hidekino
質問者

補足

ご回答ありがとうございます。 >単純に言えば、40K以下のテーブルを作る時にしか、小さい空き部分を使う可能性がない >と言う弊害があります。 >あくまで可能性なので小さい空き部分が使用されるとは言い切れません。 勉強不足で申し訳あません。 Oracleの弊害一覧って、どちらかに掲載されているのでしょうか? 上記、弊害について詳細をしりたいのですが。 またCOALRESCEについては、試してみましたが DBA_FREE_SPACEに変化ありませんでした。 何かフォローがありましたら、よろしくお願いします。

関連するQ&A

  • dba_extentsの考え方について

    USER_A 所有のテーブル TABLE_A に対し、 1.ALTER TABLE USER_A.TABLE_A MOVE STORAGE (INITIAL 20M); を実行したあと、 2.select * from dba_extents where segment_name = 'TABLE_A' and owner = 'USER_A' order by extent_id を実行してみたところ、BYTES列が、全て1048576(つまり、1MB)になっていました。 1.を実行した時点で、InitialExtentのサイズは20MBになっているはずなのだから、 2.の結果のBYTESのうち、1レコードは20MBになっていないとおかしいのではないか、と感じています。 ※dba_tablesで、USER_A の TABLE_A の INITIAL_EXTENT が 20MB になっていることは確認しています。 dba_extents はエクステント1つ々々に対する情報を表しているのだ、と私は理解していたのですが、 私の理解は間違っているでしょうか。 以上です。 ご回答よろしくお願い致します。

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

    よろしくお願いします。 表と表領域とデータファイルの関係を一発で導く方法を 教えてください。 今のところ、下記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 ; ------------------------------

  • CreateTable時のInitialエクステントについて

    以下のようにテーブルスペースとテーブルを作成すると空のテーブルなのにエクステントが2つ発生するのですが、なぜでしょうか? CreateTableではInitialエクステントが1つ発生するだけではないのでしょうか? ご回答をお願いします。 バージョン:Oracle9.2.0.1.0 CREATE TABLESPACE GOMI DATAFILE '/export/home/dbf/user_data_gomi.dbf' SIZE 32M REUSE MINIMUM EXTENT 1K DEFAULT STORAGE ( INITIAL 512K NEXT 512K PCTINCREASE 0 MINEXTENTS 1 ); ========================================= CREATE TABLE GOMI_T ( NAMAE VARCHAR2(60) ) PCTFREE 0 TABLESPACE GOMI STORAGE ( INITIAL 128K NEXT 16K MINEXTENTS 1 ); SQL> L 1 SELECT SUBSTR(SEGMENT_NAME,1,8) "SEGMENT",EXTENT_ID,BYTES,BLOCKS 2 FROM DBA_EXTENTS 3* WHERE TABLESPACE_NAME = 'GOMI' SQL> / SEGMENT EXTENT_ID BYTES BLOCKS ---------------- ---------- ---------- ---------- GOMI_T 0 65536 32 GOMI_T 1 65536 32 ↑エクステントが2つ発生する。

  • 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 したいということです。 すみませんが、お分かりの方、宜しくお願い致します。

  • Oracle8i DBA StudioでOMSへ接続できない

    みなさま、初心者ですが、どうぞ宜しくお願いいたします。 昨日、上司に「Oracle8のダンプファイルがあるから、ローカルにOracleインストールして、テーブルのデータを参照して。」とのことで、初めてOracleに触れました。 環境は、WindowsXPで、Oracle8.1.7です。 インストールし、Database Configuration Assistantで、データベースを作成しました。 そしてDBA Studioをスタンドアロンで起動させ、作成したデータベースを選択し、接続情報を入力しました。 ユーザ名:sys パスワード:sys 接続モード:SYSDBA そこで、[ツール]⇒[インポート]で、インポートできるのかなぁと思いやってみたところ、「OMSに接続されている場合のみ起動できます」との警告が表示されてしまいます。 再度、DBA Studioを起動させ、OMSへログインしようとしても、管理者・パスワード・Management Severが正しくないとログインできません。 そもそも、勉強が不足していて、こんな事態になっているのですが、「ダンプファイルをインポート」するにはどのように行えばよろしいのでしょうか? また、参考になるサイトがありましたら教えてください。 宜しくお願い申し上げます。

  • Oracleはどの程度まで巨大なテーブルを扱える?

    稼働中のOracle9iデータベースに新規テーブルを追加することになりました。 なのですが、現在利用中のテーブルに比べて、新規に扱おうとしているデータ量が格段に多く、 どれほどメモリを増やせばいいのか、普通にパフォーマンス評価できるのか、 それ以前に使い物になるのかといったことが全くわかりません。 サーバOSは64bitのSolaris8、メモリは4GBほど積んでいます。データのほうですが、 格納すべきデータが1日最大2000万件ほど発生します。データ保持日数は4ヶ月で、古いものから消していきます。 つまり、単純計算で一テーブル最大で約25億レコードが蓄積されることになります。 1レコードあたり概算で256バイトとして、600GBを超えます。 (ストレージは1TBくらい用意して、日付でパーティション分けして・・・とか考えてます) いきなり全部解決しようとは思いませんので、 巨大なDB構築に際して注意点、参考になる文書などご存知ありませんでしょうか?

  • マニュアル通りにDB作成してるのですが、エラーになります

    以下のガイドを参照してDBを作成しようとしているのですが、エラーがでて作成できません。 Oracle9i データベース管理者ガイド リリース2(9.2) 手順6:create database文の発行 ページ2-18 環境:Oracle9i 9.2.0 どなたかアドバイスお願いします。 -----------実行結果---------------------------------------- SQL> create database mynewdb 2 USER SYS IDENTIFIED BY pz6r58 3 USER SYSTEM IDENTIFIED BY yltz5p 4 LOGFILE GROUP 1 ('c:\oracle\oradata\mynewdb\redo01.log') SIZE 100M, 5 GROUP 2 ('c:\oracle\oradata\mynewdb\redo02.log') SIZE 100M, 6 GROUP 3 ('c:\oracle\oradata\mynewdb\redo03.log') SIZE 100M 7 MAXLOGFILES 5 8 MAXLOGMEMBERS 5 9 MAXLOGHISTORY 1 10 MAXDATAFILES 100 11 MAXINSTANCES 1 12 CHARACTER SET US7ASCII 13 NATIONAL CHARACTER SET AL16UTF16 14 DATAFILE '/ORACLE/ORADATA/mynewdb/system01.dbf' SIZE 325M REUSE 15 EXTENT MANAGEMENT LOCAL 16 DEFAULT TEMPORARY TABLESPACE tempts2 17 DATAFILE 'c:\oracle\oradata\mynewdb\temp02.dbf' 18 SIZE 20M REUSE 19 UNDO TABLESPACE undotbs 20 DATAFILE 'c:\oracle\oradata\mynewdb\undotbs01.dbf' 21 SIZE 200M REUSE AUTOEXTEND ON NEXT S120K MAXSIZE UNLIMITED; DATAFILE 'c:\oracle\oradata\mynewdb\temp02.dbf' * 行17でエラーが発生しました。: ORA-25139: CREATE TEMPORARY TABLESPACE????????????? -----------実行結果----------------------------------------

  • CreateTableのオプション確認方法

    以下のCREATE文を実行し、設定されたオプションが正しく設定されていることを確認したいのですが、確認方法がわかりません。どうかご教授願います。 以下のSQLで確認した結果、PCT_USED等が表示されませんでした。 このSQLで上記を確認できる場合、表示されない項目は何か理由があるのでしょうか? ---------------------------------------------------------------- 確認SQL SELECT OWNER ,TABLE_NAME ,TABLESPACE_NAME ,PCT_FREE ,PCT_USED ,INI_TRANS ,INITIAL_EXTENT ,NEXT_EXTENT ,MAX_EXTENTS ,PCT_INCREASE FROM dba_tables ----------------------------------- CREATE TABLE free_table( old_name VARCHAR2(5), new_name VARCHAR2(5) ) tablespace TESTDAT01 pctfree 20 pctused 70 initrans 1 storage( initial 1M next 1M maxextents UNLIMITED pctincrease 0 ) ---------------------------------- 確認したい値 tablespace TESTDAT01 pctfree 20 pctused 70 initrans 1 storage( initial 1M next 1M maxextents UNLIMITED pctincrease 0 ------------------------------ どうかご教授よろしくお願いします。

  • インデックスの再構築の意味って何ですか?

    SQLServer2000 SP3a Widnows2000Server を使用しています。 今社内のプログラムを見ていて あるテーブルのインデックスの再構築を行う プログラムを発見したのですが、 インデックスの再構築って何なのでしょうか? 全てのテーブルについて再構築するのではなく データベースの中の100ぐらいのテーブルの 中の3つぐらいだけインデックスの再構築を していました。 どんないいことがあるのでしょうか? メリット・デメリット? どなたか何か些細なことでも分かる方 教えて下さい。宜しくお願いします。

  • 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サーバの調子が悪かったため、その影響も あるかもしれません。 全く原因が分かりませんので、心当たりのある方、 よろしくお願いします。