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

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

A 回答 (1件)

こんばんは。


このエラーを見て、一番最初に思いつくのは
該当ユーザのTABLESPACE使用領域の使い果たしです。

ユーザを作成する際、どのTABLESPACEに何バイトまで
使用許可をします、といった制限を設けることができます。

その使用制限値を超えたデータを挿入しようとしてエラーが
出たのではないでしょうか?

使用制限は「QUOTA」というキーワードです。
マニュアルでひくと見つかると思います。

管理者ユーザで
ALTER USER XXX QUOTA XXM ON テーブルスペース名

として制限値を大きくすれば解消できるはずです。
またサイズに「UNLIMITED(無制限)」とすることも可能です。
    • good
    • 0

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

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

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

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

QORACLE の export/import ユーティリティのユーザ単位のimport のときは・・?

oracle7にある表、view,indexなどをoracle8に持っていこうとしています。
ユーザ単位で表やindexをexport し oracle8 に持っていったのですが、元々はindexと表
が別々の表領域にあったのが、すべて同じ表領域になってしまいます。
ユーザ単位でのexportの場合は表領域の情報は格納されないそうですが、
このような場合、一番効率よく、元々の情報(アイテムごとの表領域にもどす)
の形にimport するにはどのようにすればいいのですか?

ちなみにFULLでのEXPORT/IMPORTは使わないでする方法を探しています。

Aベストアンサー

Oracle7の表領域名はわかりますか?

これがわかれば、同じ名前で表領域をOracle8に作成してください。
後はIMPORTを実行するユーザにUnlimited Tablespace権限があれば、
Export元と同じ名前の表領域にデータが格納され、Indexも元の名前の
表領域に作成されます。

Export元と同じ名前の表領域がImport先に存在しない場合、Importを
実行するユーザのデフォルトの表領域にデータが格納されます。

QOracle TABLESPACE の変更方法

こんにちは。
どなたか教えて下さい。

Oracle8.0.4を使ってます。
表を作成する際、TABLESPACEを指定しなかったので、
SYSTEMになってしまいました。
どうやったらTABLESPACEを変更できますか?

Aベストアンサー

移行したい表領域に表のコピーを
作成します。
craete table HOGE_TMP tablespace USERS
as select * from HOGE;
SYSTEM表領域にある表を削除します。
drop table HOGE;
コピーした表を元の名前に改名します。
rename HOGE_TMP to HOGE;

というのでどうでしょうか?
ただし、NOT NULL以外の制約(だったかな?)や、
ANALYZE情報等は、コピーされません。
また、表の作成時にSTORAGE句等をつけていた場合は
craete table HOGE_TMP の後につけ加える必要が
あります。
ユーザーの表領域の変更も必要です。
SYSTEM権限のあるユーザになって
alter user SCOTT default tablespace USERS;
てな感じです。

Qロールフォワードとロールバックの違いは

コンピュータの勉強をしているのですが、ロールフォワードとロールバックの違いは何でしょうか?

Aベストアンサー

データベースでは一つのトランザクションが複数の表(あるいは行)を更新するのが普通です。
何らかの原因でトランザクション処理が中断(中止)された場合、複数の表の間に矛盾が生じることは避けなければいけません。
方法は一つ、更新前ジャーナルを使ってトランザクション開始前に戻すことです。これがロールバックです。

次にデータベース処理の高速化のためにジャーナルやデータベース更新情報をメモリーにバッファリングした場合です。
バッファーが蒸発する危険性がありますので時々全書き込みをやってバッファーを空にします。これがチェックポイントです。

ことが起こればジャーナルで最新のチェックポイントまでロールバックし、そのあとトランザクション終了ジャーナルを見つけて
終了ジャーナルがあればそこまで更新後ジャーナルで前進(ロールフォワード)し、
終了ジャーナルが見つからない場合トランザクション開始ジャーナルまで更新前ジャーナルで後退(ロールバック)をします。

重ねて言いますがトランザクション開始ジャーナルの所まで戻すのがロールバック、
トランザクション終了ジャーナルのところまで進めるのがロールフォワードです。

これらのことは原子性という言葉で表せます。Wikipediaによると

Atomicity トランザクションに含まれるタスクが全て実行されるか、あるいは全く実行されないことを保証する性質をいう。日本語ではアトミック性または原子性とも呼ばれる。 口座Aから口座Bに対し1万円送金する場合を考えたとき、送金操作は次の2操作によって行われる。

口座Aの残高から1万円を引く
口座Bの残高に1万円を加える
Atomicityが保証されるとは、上の操作1、2が全て行われるか、あるいは全く行われないことを指す。どちらか片方だけが実行された場合、銀行全体の預金残高に矛盾が発生してしまう。

データベースでは一つのトランザクションが複数の表(あるいは行)を更新するのが普通です。
何らかの原因でトランザクション処理が中断(中止)された場合、複数の表の間に矛盾が生じることは避けなければいけません。
方法は一つ、更新前ジャーナルを使ってトランザクション開始前に戻すことです。これがロールバックです。

次にデータベース処理の高速化のためにジャーナルやデータベース更新情報をメモリーにバッファリングした場合です。
バッファーが蒸発する危険性がありますので時々全書き込みをやって...続きを読む

Qロールバックとロールフォワード(データベーススペシャリスト試験)

  t0  t1  t2   t3   t4   t5
        |           |
A s---e  |           |
        |           |
B s-------------e       |
        |           |
C s------------------------|
        |           |
D       |   s----e   |
        |           |
E       |   s---------|

図がずれていたらごめんなさい。
A~Eはトランザクション
sはトランザクション開始
eはコミット
t0~t5は時間を表していて
時間t2でチェックポイント
時間t5で障害が発生したとします。

参考書によると復旧時に
CとEはロールバックを行い、
BとDはロールフォワードを行うとあります。

B、C、Dはわかるのですが
Eにロールバックが必要な理由がわかりません

Eを再び実行するためにはデータは
トランザクションを開始したt3時点の状態であればよいはずです。
そしてチェックポイント(=t2)の状態はt3と同じなので、
Eの更新前ファイルを使ってデータをロールバックする必要はないように思えます。

どこで間違っているでしょうか。。。

  t0  t1  t2   t3   t4   t5
        |           |
A s---e  |           |
        |           |
B s-------------e       |
        |           |
C s------------------------|
        |           |
D       |   s----e   |
        |           |
E       |   s---------|

図がずれていたら...続きを読む

Aベストアンサー

追加質問1への回答。
違います(違う可能性があります)。
質問文における図では t3における時刻の前後関係が読み取りにくいですが,トランザクションBのCOMMITが先でデータが確定。その後にトランザクションEが開始されてそのデータを読んでいるかもしれませんから。

追加質問2への回答。
前者はデータベース利用者が明示的に発行する"ROLLBACK"というSQL命令で,
自分が実行している1トランザクションに対してのみ対象とします。
後者はデータベース管理者がおこなう障害復旧操作で,
複数のユーザが実行している複数のトランザクションが対象となります。
ロールバックを実現する仕組みはどちらも同じですが,その対象範囲が異なります。

(1)トランザクション中のディスク書き込みについて。
「データベーススペシャリスト試験」ということですから,個別製品の技術ではなく,一般的な解答が望まれているんですよね……。
私が知っている例ですと,ORACLE Databaseという製品におけるCOMMITとは,REDOログファイルに書き込むことであって,データファイルに書き込むことではないんです。COMMIT=データファイルに書き込むこと,とは言えない例が実製品ではあるんです。
ただ,そのような製品実装に因らない一般的な解答としては,質問者が×をつけた,
  >コミットとチェックポイントにメモリからディスクに書き込まれ、
  >それ以外では書き込まれない(メモリ上で処理される)
で正しいように私は思うのですが。
この点,「それ以外にも随時書き込まれる」のはどういう場合か,No.1の回答者の方に教えていただけるなら私にとっても勉強になります。

(2)トランザクションのロールバックについて
○必ず更新前ログでディスクを上書きして終了,で正しいと思います。
  >チェックポイントがあったらディスクに途中状態で書き込まれている
というのは間違いでしょう。トランザクションCが確保中のデータに対して,別のトランザクションにしろチェックポイントにしろ書き込みを許すというのは,そもそも排他制御していないということで,その前提自体が間違っていると思います。
障害発生により,データファイル上に残っているデータそのものが信用できない,まだCOMMIT前でディスクには書き込まれていないので「データファイル上のデータは元のまま残っているはず」という前提が保証できない。だから,データファイル上のデータが現在どんな値であろうと,トランザクション開始時にコピーしておいた更新前データを上書きするんじゃないでしょうか。

Googleしていて次の資料を見つけました。p.28-29の説明が,特定の製品に因ることなく,分かりやすい説明だと思いました。ご参考までに。

白井 靖人(静岡大学 情報学部情報科学科・准教授)
 平成19年度前期「データベース論」講義情報
  第12回(7/02)障害回復,同時実行制御(講義資料)
http://arc0.pico.cs.inf.shizuoka.ac.jp/~shirai/h1900zenki/database/database.html
http://www.deainoba.jp/data/view_detail.php?subject_id=00769

追加質問1への回答。
違います(違う可能性があります)。
質問文における図では t3における時刻の前後関係が読み取りにくいですが,トランザクションBのCOMMITが先でデータが確定。その後にトランザクションEが開始されてそのデータを読んでいるかもしれませんから。

追加質問2への回答。
前者はデータベース利用者が明示的に発行する"ROLLBACK"というSQL命令で,
自分が実行している1トランザクションに対してのみ対象とします。
後者はデータベース管理者がおこなう障害復旧操作で,
複数のユー...続きを読む

QOracle9iで必要なインストール領域とメモリ領域について

Oracle9i(Database Enterprise Edition)を導入しようしており、必要なディスク容量
やメモリ量を見積もっています。環境はSolaris9です。
・インストール領域としてどれだけの領域が必要でしょうか?おおそよの数値で
 けっこうです。
・Oracleで使うメモリ容量を算出する方法があればおしえてください。
 「ここに出ていますよ」という情報でもけっこうです。

よろしくお願い致します。

Aベストアンサー

・インストール領域は多分100M前後だったと思います。が、データ領域を考えるとゴミみたいなものですから、意識する必要は殆ど無いかと思われます。

・メモリ必要量はインストール時に512MB必要です。実際にはDB設計及びデータ量、利用形態(プログラムの組み方等)によって大きく異なりますので個別の案件毎に対応が必要かと思われます。少なくともEEが必要な要件であれば最低でも1G以上になると思いますが・・・


人気Q&Aランキング

おすすめ情報