Oracleの組み込み認証メカニズムを使用してユーザーアカウントとパスワードを管理するアプリケーションを開発しています。アプリケーションでは、行レベルのセキュリティも使用します。基本的に、アプリケーションを使用して登録するすべてのユーザーは、「USERS」表の標準的なエントリではなく、Oracleのユーザー名とパスワードを取得します。ユーザーはまた、特定の表にラベルを受け取ります。このタイプの機能は、DMLとDDL文の実行を多くの場合に組み合わせる必要がありますが、DDL文が暗黙のコミットを実行するため、この問題が発生します。 DDL文の実行後にエラーが発生した場合、トランザクション管理はすべてをロールバックしません。テーブルへトランザクション内にある必要があるDDLステートメントのユニットテスト
- スタートトランザクション
- 挿入人物の詳細:新しいユーザーがシステムに登録する際にたとえば、場所を取るかもしれません、次の。 (姓、名字など)-DML
- oracleアカウントを作成します(パスワードで識別されるユーザーtestuserを作成します)。 - DDL暗黙的なコミット。トランザクションは終了します。
- 新しい取引が開始されます。
- より多くのDML文(挿入、更新など)を実行します。
- エラーは、トランザクションが唯一の私は上記のロジックが設計どおりに動作していることを理解する4.
段階にロールバックし、発生したが、私はユニットテストにこの種の機能を困難にそれを発見したデータで、それを管理していますアクセス層。私は、データベースがダウンしたり、ユニットテスト中にエラーが発生して、テストスキーマがロールバックされるべきテストデータで汚染されてしまいました。これが起こったときにテストスキーマを消去するのは簡単ですが、実稼働環境でのデータベースの障害が心配です。私はこれを管理する戦略を探しています。
これはJava/Springアプリケーションです。 Springはトランザクション管理を提供しています。
新しいアカウントを追加する必要があります.. ..? –
私は、cletusの答えを読んで、代わりにUSERSテーブルでより伝統的なアプローチを使うことを強くお勧めします。 –
@matt b。 いいえ、Oracleアカウントを作成する場合、Oracleの行レベルのセキュリティ機能を使用している場合は、既存の表にラベルを追加する必要があります。 –