いくつかの点で、Flyway 2.0.1 で Oracle シノニムを処理する方法に似ていますか? . 私たちの管理するセキュリティおよび DBA グループは、オブジェクト (テーブル、ビュー、sp) {owner} 用の 1 つの Oracle スキーマと、同義語 {user} を介してアクセスするための 1 つのスキーマを決定しました。ほとんどのアプリはおそらくスイッチコンテキストを使用できますが、前述のポリシーが私を盲目にすることを除けば、主にJava JPAアクセスの中にいくつかのレガシーPL / SQLの使用法があります。所有者には、ユーザー スキーマへのアクセス権がありません。ユーザーは同義語を作成できます。
カスタム Java コードの作成についてはまだ検討していません。
そのため、Owner スキーマに対して Flyway 2.2 init() を実行し、すぐに というコピーを作成しましたSCHEMA_VERSION_USER
。(Oracle (10g) でシノニムの問題が発生しないように大文字を使用します。)
へのシノニムSCHEMA_VERSION_USER
を手動で作成しましたOwner.SCHEMA_VERSION_USER
。
実行された
mvn compile flyway:migrate -Dflyway.user=USER -Dflyway.table=SCHEMA_VERSION_USER
しかし受け取った
[INFO] Upgrading the metadata table "USER"."SCHEMA_VERSION_USER" to the Flyway 2.0 format...
[INFO] Checking prerequisites...
[ERROR] com.googlecode.flyway.core.api.FlywayException: Unable to upgrade the metadata table "USER"."SCHEMA_
VERSION_USER" to the Flyway 2.0 format
[ERROR] Caused by java.sql.SQLException: ORA-00904: "DESCRIPTION": invalid identifier
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Flyway Error: com.googlecode.flyway.core.api.FlywayException: Unable to upgrade the metadata table "USER"."SCHEMA_VERSION_USER" to the Flyway 2.0 format
ORA-00904: "DESCRIPTION": invalid identifier
テーブルを次のように修飾しようとすると、-Dflyway.table=USER.SCHEMA_VERSION_USER
失敗します
[ERROR] com.googlecode.flyway.core.api.FlywayException: Found non-empty schema "USER" without metadata table! Use init() first to initialize the metadata table.
これは欠陥ですか?意図的な設計; 考えていません。やり残し?パーミッションの問題を回避するために、DBA にシステム DBA としてすべてを実行させる必要がありますか? 本番環境だけでなく、すべての環境でそれらを使用する必要があり、「自動化された」継続的デリバリーを導入しようとしているため、使用しないことをお勧めします。schema_version
または、最初のアップグレード チェックを回避するために、ユーザー スキーマにテーブルを手動で作成するだけでよいでしょうか。最初のアップグレード チェックをバイパスするには、Java を記述する必要がありますか?
投稿メモ: 私たちは彼らに最新の DB 自動化ツールを採用してもらいたいと考えています。
ありがとう!