柔軟に働き方を選ぶ時代に必要なこと >>

マテリアライズドビューログについて

高速リフレッシュのマテリアライズドビューを作成する際に、マテリアライズドビューログを作成すると思います。それについて3点質問です。

(1)マテビューの作成手順としてはマスタ表作成⇒マテログ作成⇒マテビュー作成だと思いますが、マテログを作成した時点(まだマテビューを作成していない状態)でマスタ表のデータが登録されますでしょうか?
例えば、マテビューを作成せずマテログを作成したままの状態で容量が増加していくのかどうか疑問に思いました。

(2)マテリアライズドビューを作成すると一番最初は完全リフレッシュされると思いますが、その際はマテリアライズドビューログを使用しますか?

(3)高速リフレッシュが終わった後はマテログ内のログはなくなるのでしょうか?それとも過去の履歴としてどこかに取得しておくのでしょうか。

バージョンは10gです

A 回答 (1件)

(1) マテリアライズドビューログを作成後からマスター表への更新が全て記録されます。


マテリアライズドビューの有無には関係ありません。

(2)完全リフレッシュの際にはマテリアライズドビューログは使用されません。
が、完全リフレッシュ以前のマテリアライズドビューログは不要になり削除されます。

(3)高速リフレッシュが終わった後はマテリアライズドビューログは不要になり削除されます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

・完全リフレッシュ、高速リフレッシュともに完了したらマテリアライズドビューログは削除
・マテリアライズドビュー作成直後からマスタ表のデータ更新が始まる

お礼日時:2010/11/07 22:36

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

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

Qbatファイルからsql文実行

クライアントOS:WIN2000
Oracle:9i(サーバ(UNIX)上にあります)

現在、クライアントからbatを起動し、SQL文を投げ、結果を取得したいと思っております。
(SQL文は単純にTBLをカウントしているだけです)

・batの中身
sqlplus %UID%/%PASS%@%SID% @test.sql > output

結果は取得出来るのですが、余分な情報も結果に出力されてしまいます。結果のみを出力させるにはどうすればよろしいでしょうか?

・余分な情報
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
に接続されました。

Aベストアンサー

sqlplus に -S オプションを追加してみればどうでしょうか。

参考URL:http://biz.rivus.jp/sqlplus_overview.html

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(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

Qマテリアライズド・ビューの変更

マスターテーブルの定義変更(カラム追加等)をマテリアライズド・ビューへ反映することは可能でしょうか?ご存知の方がいらしたら教えて下さい。
マテリアライズド・ビューログを作成して高速リフレッシュを行う方針ですが、マテリアライズド・ビューを読み取り専用、あるいは更新可能で作成しても、リフレッシュで定義変更は反映されませんでした。

Aベストアンサー

高速リフレッシュではデータ変更だけですね。 http://otn.oracle.co.jp/products/oracle9i/daily/003.html

高速リフレッシュでいくなら、親テーブルの定義が変更になった場合はView自体を再作成したほうがいいかと。

QViewにインデックスは張れますか?

件名の通りなのですが、作成したViewが遅くて困っています。
改善方法としてはViewを作成しないで従来のSQLにインデックスを張って取得する方法にしようかなと考えています。
なにかいい方法はありますか?

Aベストアンサー

Viewの元テーブルに適切なIndexを貼る、ではいけないのですか?

Qマテリアライズドビューの更新時エラーについて

マテリアライズドビューの更新時エラーを検知する方法を教えて下さい。
できればマスターサイトで検知したいのですが・・・。

Aベストアンサー

1.高速リフレッシュしているなら、マスターサイトにマテリアライズド・ビュー・ログが
いるはずなので
ALL_MVIEW_LOGSか、DBA_MVIEW_LOGSから、

LAST_PURGE_DATE DATE 前回の消去が実行された日付
LAST_PURGE_STATUS NUMBER 前回の消去の状態(エラー・コード、または正常終了を示す0)
あたりをSelectでみてみたらいいのでは?
(ただし、遅延消去している場合なら検知までにタイムラグがでると思いますが。)

2.上記で無理があるなら、DBLINKを利用して、相手側の
ALL_MVIEWSか、DBA_MVIEWSを参照して、

LAST_REFRESH_DATE DATE マテリアライズド・ビューがリフレッシュされた最新の日付
(まだ移入されていない場合は空白)
STALE_SINCE DATE マテリアライズド・ビューが失効した時刻
他をSelectでみてみるとか。

3.DBLINKを利用して、相手側のDBA_JOBSやDBA_JOBS_RUNNINGを見てもいいかも。

いずれも、selectする項目の詳細はマニュアル見てみて。
http://docs.oracle.com/cd/E16338_01/server.112/b56311/toc.htm
第II部 静的データ・ディクショナリ・ビュー
に全部ありますから。

1.高速リフレッシュしているなら、マスターサイトにマテリアライズド・ビュー・ログが
いるはずなので
ALL_MVIEW_LOGSか、DBA_MVIEW_LOGSから、

LAST_PURGE_DATE DATE 前回の消去が実行された日付
LAST_PURGE_STATUS NUMBER 前回の消去の状態(エラー・コード、または正常終了を示す0)
あたりをSelectでみてみたらいいのでは?
(ただし、遅延消去している場合なら検知までにタイムラグがでると思いますが。)

2.上記で無理があるなら、DBLINKを利用して、相手側の
ALL_MVIEWSか、DBA_MVIEWSを参照して...続きを読む

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

Qroleの権限確認方法

ユーザーの権限を確認しようと思っています。
select * from session_roles;
でユーザーが持っているロールはわかったのですが、
具体的にどんな権限(drop index,drop tableなど)
を持っているのか、それぞれのロールの権限を確認
するにはどうすればいいのでしょう?
簡単な質問で申し訳ないのですが、入門書を読んでも
見つからなかったので質問させていただきました。
もし答えるまでもない質問なら、ここを調べろとurl
を教えてくださると大変助かります。よろしくお願いします。

Aベストアンサー

以下のディクショナリで確認できると思います。
role_role_privs : ロールに付与されたロールの確認
role_sys_privs : ロールに付与されたシステム権限
role_tab_privs : ロールに付与された表権限

詳細は、リファレンスマニュアルに記載されています。
PDF 形式のマニュアルが、OTN Japan に公開されていますので、
必要であれば (無料登録が必要) OTN Japan からDownload されては
いかがでしょうか?

参考URL:http://technet.oracle.co.jp/

QOracleで流したSQLのログを取得できますか?

ASP+Oracle9iで作られたシステムがあります。
Oracleの設定などは前任者がしており、まともな引継ぎを受けないまま私が維持運用員となりました。
現在DBからあるレコードが消えてしまい(最初から作られてない可能性もあり)、顧客からクレームがついています。
状況から考えて怪しいプログラムを調査したのですが、原因不明でした。
そこで、Oracleの方で今まで流れたSQLをログとして保存していれば手がかりがつかめるのではないかと思い、情報を探しているのですが見つからないので教えて頂きたいのです。
私はOracleの知識(管理面について)が殆どなく、Oracleを使うことはできるが、Oracleの設定がどういう状況になっているか調べることもできず、資料もありません。

1.そもそもOracleにSQLをログとして保存する機能があるのか?
2.あるとすれば、保存機能が有効になっているか、保存したファイルがどこにあるかをどこで確認できるか?

以上の点についてご存知の方、どうぞ回答よろしくお願いします。

Aベストアンサー

OracleのSQL実行痕跡は以下に示すものの中にあります。
ただし、それぞれの設定レベル、保存方法によって、参照できる範囲は変わります。

1.オンラインREDOログとアーカイブログ
  オンラインREDOログはすべてのOracleデータベースに存在します。
  ですが、そのREDOログのサイズとシステムのアクセス量によって保存期間は変化します。アーカイブログ設定しておけば、古いREDOログはアーカイブとして吐き出されます。
  これらは#1の方がおっしゃったLOGMINERで実行済みSQLを調査することができます。
  アーカイブログモードになっているかどうかは、下記で確認できます。
   SQL> select log_mode from v$database;

  また、どのアーカイブログファイルを調査するかは下記を参照すれば良いと思います。
   SQL> select name,to_char(completion_time, 'yyyy/mm/dd hh24:mi') adate from v$archived_log;

2.フラッシュバック問い合わせ
  これは初期化パラメータUNDO_MANAGEMENTがAUTOに設定されており、かつUNDO_RETENTIONが保存期間として適切に設定されている場合のみ使用できます。
  やっていることは、UNDO表領域(旧RBS用表領域)の中に残っている実行履歴を参照しています。したがって、データベース設計時にフラッシュバック問い合わせを前提としていない限り、使える可能性は低いです。

3.その他
  監査を実行していれば、実行SQLを取得できる可能性があります。
  ただし、監査レベルなどを理解しておかないと、すべてのSQLが取得されていない可能性がありますので、難しいかもしれません。

OracleのSQL実行痕跡は以下に示すものの中にあります。
ただし、それぞれの設定レベル、保存方法によって、参照できる範囲は変わります。

1.オンラインREDOログとアーカイブログ
  オンラインREDOログはすべてのOracleデータベースに存在します。
  ですが、そのREDOログのサイズとシステムのアクセス量によって保存期間は変化します。アーカイブログ設定しておけば、古いREDOログはアーカイブとして吐き出されます。
  これらは#1の方がおっしゃったLOGMINERで実行済みSQLを調査することができま...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報