3

現在、AとBの2つのスキーマがあります。

Bにはテーブルがあり、Aはそのテーブルの挿入と更新を選択して実行します。

SQLスクリプトでは、タスクを完了できるようにAにアクセス許可を付与しています。

grant select on B.thetable to A
etc,etc

これで、テーブル'thetable'が削除され、別のテーブルの名前が少なくとも1日に1回Bに変更されます。

rename someothertable to thetable

これを行った後、AがB.thetableでselectを実行すると、エラーが発生します。

ORA-00942: table or view does not exist

ドロップ+名前変更操作を実行した後、付与も失われる可能性はありますか?

もう一度アクセス許可を割り当てる必要がありますか?

アップデート

someothertableには助成金がありません。

update2

'thetable'にデータを挿入する毎日のプロセスは、N回の挿入ごとにコミットを実行するため、ロールバックを実行できませんでした。そのため、2つのテーブルを使用します。

前もって感謝します

4

4 に答える 4

7

はい、テーブルを削除すると、助成金も削除されます。

VIEWそこから選択しthetableて付与することを試みることができますSELECT

定期的にテーブルを落とすというあなたの戦略は、私にはまったく正しく聞こえません。なぜあなたはこれをしなければならないのですか?

編集

毎日テーブルを落とすよりも良い方法があります。

  1. thetable行が有効かどうかを示す別の列を追加します。

  2. その列にインデックスを配置します(または、そのテーブルから選択するために使用する既存のインデックスを拡張します)。

  3. クエリに別の条件を追加して、「有効な」行のみを考慮するか、それを処理するビューを作成します。

  4. データをインポートするときは、新しい行を「新規」に設定します。インポートが完了すると、1回のトランザクションですべての「有効な」行を削除し、「新しい」行を「有効」に設定できます。

インポートが失敗した場合は、トランザクションをロールバックするだけです。

于 2010-02-14T22:18:56.577 に答える
1

おそらく、テーブルの名前を変更するプロセスは、許可を与えるプロシージャも実行する必要がありますか?あなたは空想を得て、既存の助成金について辞書を照会し、それらを名前が変更されたテーブルに適用することさえできます。

于 2010-02-15T00:30:06.200 に答える
0

いいえ:「OracleDatabaseは、古いオブジェクトの整合性制約、索引、および付与を新しいオブジェクトに自動的に転送します。」 http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9019.htm#SQLRF01608

あなたは別の問題を抱えている必要があります

于 2010-02-14T22:14:30.550 に答える
0

もう1つのアプローチは、実行している作業に一時テーブルを使用することです。結局のところ、少なくともそのテーブルでは、データが一時的なものであるように思われます。新しいデータセットを取得したり、新しいテーブルを作成したりするたびに、助成金を再適用する必要はありません。

于 2015-12-08T14:08:55.073 に答える