質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

解決済

2回答

10040閲覧

oracle 12c 完全リフレッシュについて

umegon

総合スコア24

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

0グッド

0クリップ

投稿2018/04/05 06:28

こんにちは

キーワード検索で検索したのですが、ピンとくる情報が見つからなかったので投稿させて頂きます。

Oracle database 12c の環境で、マテリアライズドビューの完全リフレッシュを行う際のコマンドについて質問があります。
※初回作成時は、高速リフレッシュを指定しております。訳あって一度だけ完全リフレッシュを実施したいのですが、下記事象が発生してしまっています。

色々な解説サイトを見ていると
exec dbms_mview.refresh('TEST_VIEW','c');
と記載されているサイト様が多かったです。

実際に流しているコマンドは
exec dbms_refresh.refresh('"スキーマ名"."View名"','c');
となっております。
(スキーマ指定の方法は11gではこれで動いていました。)

12cの環境で上記を実施すると、
PLS-00306: wrong number or types of arguments in call to 'REFRESH'

引数がおかしいと怒られてしまいました。

12cでは、手動完全リフレッシュのコマンドまたは、引数の指定方法が変わってしまったなどあるのでしょうか?

何か知っている方がいらっしゃいましたら、ご教示頂きたいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

DBMS_MVIEWは12cにもありますのでそちらを使用すれば良いんじゃないすか。
REFRESHプロシージャ

別にDBMS_REFRESHで管理したいって訳じゃないんでしょうから。

DBMS_REFRESHにより、リフレッシュを一括して行えるマテリアライズド・ビューのグループを作成し、ある一時点において、整合性のある変換が行えるようになります。

投稿2018/04/05 08:16

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umegon

2018/04/05 08:31

こちらの質問にもご回答ありがとうございます。 もしかすると自分は勘違いをしてしまっているかもしれません。 [DBMS_MVIEW](https://docs.oracle.com/cd/E57425_01/121/ARPLS/d_mview.htm#i997194) こちらのページの DBMS_MVIEWサブプログラムの要約>REFRESHプロシージャ の詳細の説明が↓ [DBMS_REFRESH](https://docs.oracle.com/cd/E82638_01/ARPLS/DBMS_REFRESH.htm#GUID-1CDA8331-2852-4C1A-AE14-4D5B9533AA7B) かと認識してしまっていたのですが、全然別なのでしょうか。。。 似てる名前なので同じなのかと認識しちゃっております。確かによく見るとリフレッシュの構文が違いました。
sazi

2018/04/05 17:48 編集

別なパッケージです。 >実際に流しているコマンドは >exec dbms_refresh.refresh('"スキーマ名"."View名"','c'); >となっております。 >(スキーマ指定の方法は11gではこれで動いていました。) 「11gの時はMAKEも一度は行っていた」というのを忘れている可能性が大ですね。
umegon

2018/04/09 04:28

おかげさまで完全リフレッシュを動作させることが出来ました。 ありがとうございました。
guest

0

次回から質問の前にマニュアルを確認しましょう。DBMS_xxxxxx 関係のパッケージはPL/SQLパッケージおよびタイプ・リファレンスが対象です。

Oracle12.1 PL/SQLパッケージおよびタイプ・リファレンス DBMS_REFRESH.REFRESH には

レプリケーションのコンテキストでのこのパッケージの詳細は、『Oracle Databaseアドバンスト・レプリケーション・マネージメントAPIリファレンス』の「DBMS_REFRESH」を参照してください。


Oracle12.1 アドバンスト・レプリケーション・マネージメントAPIリファレンス DBMS_REFRESH.REFRESH
or
Oracle12.2 PL/SQLパッケージおよびタイプ・リファレンス DBMS_REFRESH.REFRESH
はリフレッシュ・グループを指定する一連のリフレッシュをまとめてグループとする DBMS_REFRESH.MAKE でリフレッシュ・グループを作成するようになりました。

投稿2018/04/05 06:52

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umegon

2018/04/05 07:20

Orlofsky様 ご回答ありがとうございます。 ごめんなさい。 上記のページは投稿前に何度も検索でヒットし、 確認してはいるのですが、それでもうまくいかなくて質問を投稿させて頂いた状況になります。 ご提示いただいております 「https://docs.oracle.com/cd/E57425_01/121/REPMA/rarrefreshpac.htm#i94176」 より リフレッシュの構文が DBMS_REFRESH.REFRESH ( name IN VARCHAR2); であることは理解しておりますが、 上記の構文では高速リフレッシュなのか、完全リフレッシュなのか指定できないと思っています。 Google等で「Oracle 完全リフレッシュ」などで検索すると 実際には「exec dbms_mview.refresh('TEST_VIEW','c');」で解説されているサイト様が多いですが、それは11gまでで12cでは使用できないということになってしまうのでしょうか? >DBMS_REFRESH.REFRESH はリフレッシュ・グループを指定する一連のリフレッシュをまとめてグループとする DBMS_REFRESH.MAKE でリフレッシュ・グループを作成するようになりました 上記について追加でお聞きしたいのが、今行いたいのは作成後に手動で完全リフレッシュを行いたいのですが、その場合でもMAKEを使用するのでしょうか? CHANGEプロシージャ:リフレッシュ・グループのリフレッシュ間隔を変更します REFRESHプロシージャ:リフレッシュ・グループを手動でリフレッシュします MAKEプロシージャ:リフレッシュ・グループ・メンバー、およびこのグループ・メンバーをリフレッシュする間隔を指定します 上記を見て、私は、CHANGEとMAKEの違いって何だろう?両方ともリフレッシュの間隔を変更しているように見えています。 結局リフレッシュを実行するのはREFRESHプロシージャなのではないのかな? と混乱しております。。。
Orlofsky

2018/04/09 15:30

saziさんのDBMS_MVIEWが正解ですね。 このへんはOracle側のパッケージ名の誤解を生むネーミングのまずさが悔やまれます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問