19.7リリースアップデートを適用しようとしているOracle19.3マルチテナントデータベースがあります。 RUはopatchによって問題なくインストールされました。ただし、datapatchではORA-1114エラーが発生します。ログの1つに次のようなエラーが表示されます:
SQL>プラグ可能なデータベースの変更GOLD2020_06_18_123653openread write instance =all;
プラグ可能なデータベースを変更するGOLD2020_06_18_123653openread write instance =all
*
1行目のエラー。
ORA-65107:インスタンスで現在のタスクを処理しているときにエラーが発生しました:1
ORA-17500:ODMエラー:無効な引数
ORA-01114:ファイル12346へのブロックの書き込み中にIOエラーが発生しました(ブロック#1)
ORA-17500:ODMエラー:無効な引数
ORA-01114:ファイル12345へのブロックの書き込み中にIOエラーが発生しました(ブロック#1)
ORA-17500:ODMエラー:引数が無効です
問題が何であるかを説明する前に、私の環境でマルチテナントをどのように使用しているかについて説明しましょう。週に1回、本番データベースのコピーを作成するcronジョブがあります(ディスクベースのハードウェアスナップショットを使用)。この作品のコピーを「ゴールデンイメージ」と呼んでいます。このゴールデンイメージは、PDBの1つとしてデータベースにプラグインされています。 PDB名の形式はGOLDyyyy_mm_dd_hhmiss そのPDBがいつ作成されたかを知ることができます。
次に、すべての開発データベースとテストデータベースがこのゴールデンイメージPDBから作成されます。 DEV1またはTESTを更新する必要がある場合は、DEV1またはTESTのPDBをシャットダウンしてドロップするだけです。次に、最新のゴールデンイメージのスナップショットクローンを作成します。ゴールデンイメージPDBは、スナップショットのクローン作成を容易にするために読み取り専用モードになっています。
ここで書いたように、スナップショットクローンのソースとしてPDBを使用すると、Oracleはファイルのアクセス許可を220に変更します。これはOracleが私たちを自分たちから保護しているためです。 Oracleがデータファイルを読み取り専用にするために、スナップショットクローンのソースを変更することは許可されるべきではありません。オラクルでファイルのパーミッションを変更することを決定した人は誰でも、データパッチ開発者とそれについて話しませんでした。
DatapatchはREADONLYPDBを認識し、それをREAD WRITEとして開き、PDBの内部にパッチを適用してから、READONLYに戻します。ただし、ファイルのアクセス許可で許可されていないため、datapatchはPDBを読み取り/書き込みモードで開くことができません。したがって、私が受け取っているエラー。
オラクルは私にこれを行いました…彼らはファイルパーミッションを一方向に強制しました、そしてそれからデータパッチは彼らが今望んでいることをすることができません。
サービスリクエストに関する公式の言葉はまだ受け取っていませんが、これはバグになると思います。私の意見では、DatapatchはスナップショットクローンのソースであるPDBをスキップする必要があります。
その間、あなたはこれを無理やり通り抜けることができます。 datapatchに-exclude_pdbsパラメータを使用しようとしましたが、機能しませんでした。どうやら、PDBのリストにカンマが含まれていると、そのパラメータが機能しないという既知のバグがあります。したがって、次のようにデータパッチを実行する必要がありました:\
./datapatch -verbose -pdbs cdb \ $ root
./datapatch -verbose -pdbs pdb \ $ seed
./datapatch -verbose -pdbs dev1、dev2
まず、データパッチを実行してCDB$ROOTにパッチを適用しました。次に、PDB$SEEDにパッチを適用しました。次に、開発PDBにパッチを適用しました。ゴールデンイメージPDBにパッチを適用しませんでした。