出産前後の痔にはご注意!

こんにちは
Oracleのテーブルを作成するときに
ExtentのINITIALを1KB、Nextを0KB、
MAXEXTENTSをUNLIMITEDで設定した場合
1KB以上のデータを入れた場合Oracleとしては
どのような動作になるのでしょうか?

実際にやってみると明らかに1KB以上のデータを
挿入しているにもかかわらずエラーが発生しません。

このQ&Aに関連する最新のQ&A

oracleとは」に関するQ&A: Oracleとは?

A 回答 (2件)

ローカル管理表領域と旧来のディクショナリ管理表領域と異なり一部制限されて自動化されています。


STORAGE 句は下位互換のために自動的に変換されています。
参考:
http://biz.rivus.jp/technote507015.html

AUTO ALLOCATEを使用しているということですから
エクステントのサイズは64KB~4MBの可変でMAXEXTENTは指定できませんから勝手に拡張されていきます。
2^31エクステントはオラクルの上限です。

下のURLのスキルアップ講座はわかりやくまとめられた資料ですのでぜひ参考にしてください。

http://otn.oracle.co.jp/skillup/oracle9i/index.h …
第3部 テーブルの設計 に書かれています
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
スキルアップ講座見てみました。
判りやすく記述してあり理解できたと思います。
もう少し、この講座内容を見てみます。

お礼日時:2006/03/24 18:59

データブロックサイズは最低でも2KB以上だからだと思いますが


ローカル管理表領域かディクショナリ管理表領域なのかによって変わるような気がします。
ローカル管理表領域ならUNFORMかAUTO ALOCATEによって変わると思います。

自分の環境がどんなバージョンのどんな表領域でデータブロックサイズがいくつかを調べて、さらに調査してみてはどうでしょう?
    • good
    • 0
この回答へのお礼

ありがとうございます。
Oracleバージョンは9.0.4で表領域管理はローカル管理
でAUTOALOCATEになっていました。
この場合、NEXT 0であってもOracle側で勝手に拡張し
てくれるのでしょうか?
管理者マニュアルを見たのですが力不足で理解できま
せんでした。

それともう一つ解せない動きでMAXEXTENTSを指定して
いるにもかかわらず2147483645という値が設定されて
しまいます。
これもAUTOALLOCATEであるからなのでしょうか?
質問ばかりで申し訳ありません。

お礼日時:2006/03/24 17:37

このQ&Aに関連する人気のQ&A

oracleとは」に関するQ&A: Oracleとは?

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qテーブル作成時の初期サイズについて

Oracle 10g EE をインストールし、インスタンスを立ち上げました。
ちなみにOSは Win2003 です。
その後、Create Table にてTable を作成しようと考え、以下のSQLにて作成しました。

CREATE TABLE TEST (
"ABC" VARCHAR2(10) NOT NULL,
"XYZ" CHAR(4) NOT NULL)
TABLESPACE TEST_SPACE PCTFREE 10 PCTUSED 80
STORAGE ( INITIAL 16K MINEXTENTS 1 );

エラーも無く無事作成できたのですが、Enterprise Manager Consol にて領域サイズを確認したところ、「80K」となっておりました。

ちなみに対象表領域のブロックサイズは16Kとなっております。

この現象の原因や解決方法について、ご存知の方がいらっしゃいましたらご教授願えませんでしょうか。
よろしくお願いいたします。

Aベストアンサー

Oracle 10g ではデフォルトでローカル管理表領域 (AUTOALLOCATE) になっているので、最小エクステントサイズは 64K になります。従って、それ以下の INITIAL を指定しても 64K に切り上げられます。ちなみに、80K になったのは、そこにセグメントヘッダの 16K が追加された結果でしょう。

解決するためには表領域自体をディクショナリ管理にすることですが、お勧めしません。

Qデータを削除しても表領域の使用率が減りません

いつもお世話になっております。

今使用している表領域の使用率が高くなってきたため、
不要なテーブルやデータを削除しました。

ですが、少ししか使用率が減らず困っています。

テーブルを削除した際にはPURGE RECYCLEBINで、BIN~のテーブルも
消しています。

何か他に原因があるのでしょうか?

Aベストアンサー

前の方のおっしゃるとおり、DELETEしただけでは領域は開放されません(ハイウォーターマークが下がらない)ので、以下を試してみてください。

1.該当テーブルの全件削除で良い場合
truncate テーブル名 drop storage;
を実行する。
これで領域も開放されます。(最後のところをreuse storageとすると領域保持する意味となる)

2.部分的にdeleteして、領域を開放したい場合
alter table テーブル名 enable row movement;
alter table テーブル名 shrink space cascade;
alter table テーブル名 disable row movement;
を実行する。
1行目は領域開放の前準備、3行目は1行目の変更を元に戻す意味。
2行目でcascadeしておくと、関連インデックスの領域も一緒に縮小してくれます。

QOracleのCreate Table 文のStorage句

お世話になります。

OracleのCreate Table 文のStorage句のNextの値を
変更したいのですが、できるのでしょうか?

Alter Table文で変更するのでしょうか?
手元にマニュアルが無く困っております。

よろしくお願いします。

Aベストアンサー

alter table テーブル名 storage ( next 変更後のサイズ );

だっけかな?

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

QSYSユーザーでログインしたい

SQL plusでSYSユーザーでログインするにはどうすればよいのでしょうか?
SYSTEMユーザーやSCOTTユーザーではログインできるのですが、SYSユーザーになる方法がわかりません。
お願いします。

Aベストアンサー

>SQL plusでSYSユーザーでログインするにはどうすればよいのでしょうか?
特別なことする必要がないと思います。
ログインできない場合いろいろな原因が考えられます。
一番可能な原因は設定によってSYSユーザーNOMAL権限でログインできない場合あります。
この場合
sqlplus sys/パスワード@接続文字列 as sysdba
で試してください。


>SYSTEMユーザーやSCOTTユーザーではログインできるのですが、SYSユーザーになる方法がわかりません。
conn sys/パスワード@接続文字列 as sysdba

Qcreate table時のINITIALとMAXEXTENTSの決定について

基本的な事ですみません。
オラクルのホームページから、
表、索引に必要な領域サイズを見積もった所
あるテーブルが1.8G(表1.4G+索引0.4M)と出たとします。

このテーブルをcreate tableで作成する場合
INITIAL値は1.8Gで設定すればいいのでしょうか?
ちなみにこのテーブルは随時増えています。
あらかじめ1.8G以上、余分に取る方がいいのでしょうか?

MAXEXTENTSは、もうすぐ2Gに達するので
UNLIMITEDで設定した方がいいのでしょうか?
(今、MAXEXTENTSを2G以上にするとエラーが発生します)

Aベストアンサー

表と索引は別ですから、表のinitial値は1.4Gで、索引のinitial値を0.4M(?)にして下さい。
それから,MAXEXTENTSは表が拡張したときに、不連続の領域になったときの、ばらばら度合いを指定する物なので、2Gってのは変ですね。
>(今、MAXEXTENTSを2G以上にするとエラーが発生します)
どんなことをしてエラーになったのでしょうか?
実行したこととエラーをUPして下さい。

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

QOracleのsystem表領域について

ORACLE初心者です。

system表領域がいっぱいになる現象が発生しました。(使用率98%)
原因調査を依頼されましたが、system表領域がどのような要素で
構成され、増えていくのか分かりません。

(環境)
Windows2000Server
Oracle 8.1.6 WorkGroupServer

ユーザのデフォルト表領域はちゃんと指定しているとの事です。
何か情報がありましたら、教えていただきたくお願いします。

Aベストアンサー

SQL*PLUSを起動し、一般ユーザが使用しているユーザIDで
ログインしてください。

そして、
select table_name,tablespace_name
from user_tables;
を実行します。

テーブル名と表領域名が表示されますので、表領域systemを
占有しているテーブル名がわかるかと思います。

Qオラクルのデフォルトセッション数

オラクルのsessionsのデフォルト値はいくつですか?

Aベストアンサー

こんにちわ。

マニュアルを確認してみましたが、Processes, Parallel_max_servers 等
の値に依存するようですので、実際に環境を作成してSQL*Plus から
SQL> show parameters sessions
で確認して見るのが良いと思います。

QData Pump で大量データインポートの際のUNDO表領域、TEMP表領域不足エラー解消法のついて

いつも多くの方々にお世話になっております。
どうしても解決できなかったので、質問を書き込ませていただきました。

大量データのテーブルをDataPump の Impdp でインポートしようとした際に、
UNDO表領域やTEMP表領域不足によりインポートが中断されてしまうので、
その解消法を探しています。

単純にTEMP表領域やUNDO表領域のサイズを大きくすれば解決できるのですが、
ディスクの容量に限りがあり、TEMP表領域やUNDO表領域のサイズを700MBのまま、
大量データをImpdp でインポートできるようにしたいのですが、そうするとうまくいきません。

以前からあったImport の場合でしたら、「COMMIT=Y」としていすれば、
大量データであっても、TEMP表領域やUNDO表領域のサイズを700MBのまま、インポートできました。

しかし、Impdp には「COMMIT=Y」がサポートされなくなったとOTNのドキュメントにも書かれていました。

従来のImport を使えばインポートできるのですが、非常に時間を要するため、
TEMP表領域やUNDO表領域のサイズを気にせずとも
Data Pump のImpdp を用いてインポートできる方法を
ご存知の方がいらっしゃいましたら、ご教授願えませんでしょうか?

いつも多くの方々にお世話になっております。
どうしても解決できなかったので、質問を書き込ませていただきました。

大量データのテーブルをDataPump の Impdp でインポートしようとした際に、
UNDO表領域やTEMP表領域不足によりインポートが中断されてしまうので、
その解消法を探しています。

単純にTEMP表領域やUNDO表領域のサイズを大きくすれば解決できるのですが、
ディスクの容量に限りがあり、TEMP表領域やUNDO表領域のサイズを700MBのまま、
大量データをImpdp でインポートできるようにした...続きを読む

Aベストアンサー

テーブル単位でインポートなどでも駄目なのでしょうか?
UNDOや一時領域をなるべく生成しない方法を考えましょう。
#この事象はサポートセンター行きだと思います。


人気Q&Aランキング

おすすめ情報