OracleのSHOW PARAMETERだけで設定変更の完了を判断していい? LOG_ARCHIVE_DEST_nの転送先をV$ARCHIVE_DESTのSTATUS・ERROR・VALID_NOWで確かめる方法(19c)

オフィスで椅子に座っている桜色の長髪の女性のイラスト

こんにちは、おうどんです🍜

新人さん「LOG_ARCHIVE_DEST_2 の転送先、変えておきました! SHOW PARAMETER で見たら、ちゃんと新しい値になってます。完了です!」

おうどん「ありがとう。で、REDO は届いてる?」

新人さん「……SHOW PARAMETER に、届いたかどうかの列ってありましたっけ」

おうどん「ないね」

(会話は説明用の架空の場面です)

出前のうどん屋でたとえます。
SHOW PARAMETER で見えるのは、壁に貼った出前の伝票です。
住所はちゃんと書いてある。字もきれい。
でも、伝票がきれいなことと、うどんがお客さんの家に着いたことは、別の話なんです。

読者「伝票を貼った時点で、出前は終わったことにしたい」

気持ちはわかります。おうどんも、ボタンを押した瞬間に仕事が終わってほしい。

これは、おうどんも「設定を変えたあと、なんで SHOW PARAMETER だけじゃなくて SELECT でも確かめるの?」と迷ったことがある疑問です。
今回は、ローカルの Oracle Database 19c で、存在しない転送先をわざと設定して、どこに何が出るかを確かめました。

今日の結論を先に書いておきます。

  • SHOW PARAMETER が見せるのは「設定に何と書いたか」だけ。転送先が使えるかは V$ARCHIVE_DEST の STATUS・VALID_NOW・ERROR で見る
  • 存在しない宛先を書いても、ALTER SYSTEM は成功し、STATUS は VALID になることがある
  • 実際に REDO を送るまで、ERROR 列には何も出ないことがある。送ったあとにもう一度見る
目次

SHOW PARAMETER が見せているのは、壁の伝票だけ

まずは何も考えずに、転送先を書き換えて SHOW PARAMETER で見てみます。
宛先の nosuch_stby は、どこにも存在しない名前です(tnsnames.ora にもありません)。

alter system set log_archive_dest_2='SERVICE=nosuch_stby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=nosuch_stby' scope=memory;
show parameter log_archive_dest_2
System altered.

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2		     string	 SERVICE=nosuch_stby ASYNC VALI
						 D_FOR=(ONLINE_LOGFILES,PRIMARY
						 _ROLE) DB_UNIQUE_NAME=nosuch_s
						 tby
log_archive_dest_20		     string
log_archive_dest_21		     string
log_archive_dest_22		     string
log_archive_dest_23		     string
log_archive_dest_24		     string
log_archive_dest_25		     string
log_archive_dest_26		     string
log_archive_dest_27		     string
log_archive_dest_28		     string
log_archive_dest_29		     string

(今回の検証環境:Oracle Database 19c 19.3、シングルインスタンス・CDB 構成、NOARCHIVELOG。SYSDBA で CDB$ROOT に接続して実行。この記事の出力は、SQL ファイルにまとめて流した実行結果から、区切りに入れた prompt の行を除いて該当部分を抜き出しています)

受付さん(ALTER SYSTEM)「System altered. 伝票、貼っておきました!」

存在しない住所なのに、受付は笑顔です。
伝票はきれいに貼られ、SHOW PARAMETER はそれを正確に読み上げました。どちらも嘘はついていない。

ついでに、出力に気になるところが2つあります。

1つ目は、頼んでいない log_archive_dest_20 〜 29 まで出てきたこと。
SQL*Plus の SHOW コマンドのリファレンスでは、SHOW PARAMETERS のあとに書いた文字列は、その文字列を名前に含むパラメータを表示する、とされています。log_archive_dest_2 を含む名前は、20 〜 29 にもあるわけです。

新人さん「2番だけ頼んだのに、20番台が全員ついてきました」

おうどん「名字が同じだと、呼ばれてもいないのに返事しちゃうタイプ」

2つ目は、値が30文字で折り返されて VALI と D_FOR に割れていること。
SQL*Plus の表示幅の都合なので、値そのものが壊れているわけではありません。ただ、長い値をこの画面でコピーすると、途中に空白や改行がまざった伝票ができあがります。

読者「VALI D_FOR という新しい属性かと思った」

ない。長い値を確かめるときは、V$PARAMETER を列幅を広げて SELECT するほうが安全です。

存在しない宛先でも、STATUS は VALID だった

じゃあ、転送先の状態を見るビューで見てみます。
V$ARCHIVE_DEST のリファレンス(19c)によると、このビューは、いまのインスタンスについて、各転送先の現在の値・モード・状態を表示します。
出前でいえば、厨房の配達ボードです。

select dest_id, status, destination, valid_now, valid_type, valid_role, error
  from v$archive_dest
 where dest_id = 2;
   DEST_ID STATUS    DESTINATION	  VALID_NOW	   VALID_TYPE	   VALID_ROLE	ERROR
---------- --------- -------------------- ---------------- --------------- ------------ --------------------------------------------------
	 2 VALID     nosuch_stby	  YES		   ONLINE_LOGFILE  PRIMARY_ROLE

(実行時は SQL*Plus の COL コマンドで列幅を整えています。COL の行はこのブロックでは省略しました)

STATUS は VALID。VALID_NOW も YES。ERROR は空っぽ。
存在しない住所なのに、配達ボードは全部緑です。

配達ボード「2番、配達の準備OKです!」

おうどん「その住所、地図に載ってないよ」

配達ボード「まだ地図は見ていません!」

元気な返事ですが、言っていることは筋が通っています。
リファレンスでは、STATUS の VALID は「初期化されていて使える状態」、ERROR は「オープンまたはコピーのときのエラー」です。
つまり ERROR は、実際に送ろうとして、はじめて出るもの。今回の検証環境は NOARCHIVELOG(REDO をアーカイブしない運用)なので、そもそも一度も送っていません。送っていなければ、失敗もしない。

読者「一度も出前に行っていない人は、一度も道に迷っていない」

その理屈で、皆勤賞をもらおうとしないでください。

出前に出ていないのに緑。ここが今日いちばん大事なところです。
VALID は「準備ができた」であって、「届いた」ではありません。

存在しないフォルダでも、同じだった

リモートだから見ていないのかな、と思って、ローカルのフォルダ(LOCATION)でも試しました。

alter system set log_archive_dest_3='LOCATION=C:\nosuch_dir_oudon' scope=memory;
select dest_id, status, destination, valid_now, error from v$archive_dest where dest_id = 3;
System altered.


   DEST_ID STATUS    DESTINATION	      VALID_NOW        ERROR
---------- --------- ------------------------ ---------------- --------------------------------------------------
	 3 VALID     C:\nosuch_dir_oudon      YES

存在しないフォルダでも、今回の検証環境では成功して VALID でした(NOARCHIVELOG で、まだ書き込みに行っていない状態です)。

新人さん「フォルダくらいは見てくれると思ってました」

受付さん「伝票の形は見ました!」

形は見たらしいので、形を崩してみます。

書き方を間違えると、そこは止めてくれる

ASYNC を ASYNCH と書き間違えた場合です。

alter system set log_archive_dest_3='SERVICE=nosuch_stby ASYNCH' scope=memory;
alter system set log_archive_dest_3='SERVICE=nosuch_stby ASYNCH' scope=memory
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16024: parameter LOG_ARCHIVE_DEST_3 cannot be parsed

こっちは断られました。ORA-16024 は「パラメータを解析できない」。
受付さんは、伝票の書式は見るけれど、住所が実在するかは見ない。今回の実験からは、そういう受付に見えます。

受付さん「字が読めない伝票はお返しします。読める伝票は、宛先が月でもお預かりします」

月へのお届けは、たぶん REOPEN の間隔(再試行までの秒数)を何回待っても無理です。

V$ARCHIVE_DEST で見る列は STATUS・VALID_NOW・ERROR

配達ボードの見方を整理します。中身は V$ARCHIVE_DEST のリファレンス(19c)の説明を日本語にしたものです。

列何がわかるか主な値
STATUS転送先の今の状態VALID(初期化済みで使える)、INACTIVE(転送先の情報なし)、DEFERRED(ユーザーが手で無効にした)、ERROR(オープンまたはコピーのときのエラー)、DISABLED(エラーのあと無効)、BAD PARAM(パラメータにエラー)、ALTERNATE(代替先として待機)、FULL(割り当て量を超えた)
VALID_NOW今のデータベースのロール(プライマリかスタンバイか)で、この転送先が使われるかYES、WRONG VALID_TYPE、WRONG VALID_ROLE、INACTIVE
ERRORエラーの文面空ならエラーは記録されていない
FAIL_DATE最後のエラーの日時
DESTINATION送り先(フォルダかサービス名)

新人さん「STATUS が VALID なら、あとは見なくていいですか?」

おうどん「さっき、存在しない住所で VALID が出たよね」

新人さん「……3列とも見ます」

DEFER にすると、伝票は残って配達だけ止まる

LOG_ARCHIVE_DEST_STATE_2 を DEFER にすると、どう見えるか。

alter system set log_archive_dest_state_2='DEFER' scope=memory;
show parameter log_archive_dest_state_2
select dest_id, status, destination, valid_now, error from v$archive_dest where dest_id = 2;
System altered.


NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_state_2	     string	 DEFER
log_archive_dest_state_20	     string	 enable
log_archive_dest_state_21	     string	 enable
log_archive_dest_state_22	     string	 enable
log_archive_dest_state_23	     string	 enable
log_archive_dest_state_24	     string	 enable
log_archive_dest_state_25	     string	 enable
log_archive_dest_state_26	     string	 enable
log_archive_dest_state_27	     string	 enable
log_archive_dest_state_28	     string	 enable
log_archive_dest_state_29	     string	 enable

   DEST_ID STATUS    DESTINATION	  VALID_NOW	   ERROR
---------- --------- -------------------- ---------------- --------------------------------------------------
	 2 DEFERRED  nosuch_stby	  UNKNOWN

LOG_ARCHIVE_DEST_STATE_n のリファレンス(19c)では、defer は「転送先の情報と属性は残したまま、再び有効にするまでアーカイブの対象から外す」です。既定値は enable。

ここで怖いのは、LOG_ARCHIVE_DEST_2 だけを SHOW PARAMETER で見ていると、伝票は完璧に見えることです。
配達係が「保留」の札を下げているのは、別のパラメータ(STATE_2)と、配達ボードにしか出てきません。

おうどん「伝票は合ってる。でも配達係は休憩中」

新人さん「休憩の札、伝票の横に貼っておいてほしかったです」

20番台が全員ついてくるくせに、隣の STATE_2 はついてこない。SHOW PARAMETER の部分一致、気が利くのか利かないのか。

WRONG VALID_ROLE は「今のロールでは送らない」

VALID_FOR を STANDBY_ROLE(スタンバイのときだけ使う)に変えてみます。

alter system set log_archive_dest_2='SERVICE=nosuch_stby ASYNC VALID_FOR=(ONLINE_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=nosuch_stby' scope=memory;
select dest_id, status, destination, valid_now, valid_type, valid_role, error from v$archive_dest where dest_id = 2;
System altered.


   DEST_ID STATUS    DESTINATION	  VALID_NOW	   VALID_TYPE	   VALID_ROLE	ERROR
---------- --------- -------------------- ---------------- --------------- ------------ --------------------------------------------------
	 2 VALID     nosuch_stby	  WRONG VALID_ROLE ONLINE_LOGFILE  STANDBY_ROLE

STATUS は VALID のまま、VALID_NOW が WRONG VALID_ROLE になりました。
リファレンスにも、VALID_FOR=(ONLINE_LOGFILE,STANDBY_ROLE) の転送先がプライマリで動いているときに WRONG VALID_ROLE になる、と例が載っています。

これは間違いではなく、「今は配達しない伝票」です。ロールが切り替わったら使われる予定のもの。
裏を返すと、ロールが切り替わるまで、一度も試されない伝票でもあります。

支店長「本店になったら、この住所に出前します」

おうどん「本店になるまで、誰もその住所に行ったことがないんだよね」

切替のあとにだけ転送エラーが出る、という話は、だいたいここから始まります(切替そのものは今回の検証環境では試していません)。

🔰 ここまで読めば今日から困らない

  • SHOW PARAMETER で確かめられるのは「設定に何と書いたか」まで
  • 転送先は V$ARCHIVE_DEST の STATUS・VALID_NOW・ERROR を3つセットで見る
  • STATUS が VALID でも、まだ一度も送っていないだけかもしれない。REDO が送られたあとに、ERROR と FAIL_DATE をもう一度見る
  • LOG_ARCHIVE_DEST_STATE_n が DEFER になっていないかも見る

ここから先は中級者向けです。名前解決の確かめ方と、変更作業の確認手順をまとめます。

宛先の名前が引けるかは、サーバーの上で確かめる

SERVICE に書いた名前(ネットサービス名)が引けないと、転送は失敗します。
Data Guard のトラブルシューティング(19c)には、スタンバイに REDO が届かないときは、まず V$ARCHIVE_DEST でエラーを見る、とあります。そのうえで、届かない原因の候補として、次のようなものが並んでいます(抜粋)。

  • プライマリの tnsnames.ora で、スタンバイのサービス名が正しく設定されていない
  • LOG_ARCHIVE_DEST_n に書いたネットサービス名が間違っている
  • LOG_ARCHIVE_DEST_STATE_n が ENABLE になっていない
  • スタンバイのリスナーが起動していない、スタンバイのインスタンスが起動していない
  • スタンバイの転送先をプライマリの SPFILE に追加したが、その変更をまだ有効にしていない

新人さん「つまり、伝票の住所が住所録に載っているか、ですね」

おうどん「そう。しかも、見るのは厨房の住所録。自分のスマホの連絡先じゃない」

住所録(tnsnames.ora)は、データベースが動いているサーバーの Oracle Home 側のものを見ます。手元のパソコンで tnsping が通っても、サーバーの住所録に載っているとは限りません。

tnsping と SQL*Plus で、名前が引けるかを見る

今回の検証環境で、存在しない名前と、存在する名前を tnsping してみました。

tnsping nosuch_stby
tnsping cdb19
### tnsping nosuch_stby exit=1

TNS Ping Utility for 64-bit Windows: Version 19.0.0.0.0 - Production on 21-OCT-2026 08:12:32

Copyright (c) 1997, 2019, Oracle.  All rights reserved.

Used parameter files:
C:\app\<user>\product\19.0.0\dbhome_1\network\admin\sqlnet.ora

TNS-03505: Failed to resolve name

### tnsping cdb19 exit=0

TNS Ping Utility for 64-bit Windows: Version 19.0.0.0.0 - Production on 21-OCT-2026 08:12:37

Copyright (c) 1997, 2019, Oracle.  All rights reserved.

Used parameter files:
C:\app\<user>\product\19.0.0\dbhome_1\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = cdb19)))
OK (20 msec)

(Python から tnsping.exe を2回呼び、出力をそのまま並べたものです。### の行は区切りとして Python 側で足した行です。パスの一部を伏せています)

同じ名前で SQL*Plus から接続しようとすると、こうなりました(ユーザー名もパスワードも書かず、名前解決だけで失敗させています)。

sqlplus -S -L /@nosuch_stby
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified


SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus

tnsping は TNS-03505、SQL*Plus は ORA-12154。言い方は違いますが、どちらも「その名前、住所録にありません」です。

新人さん「じゃあ、tnsping が OK なら転送もOKですね!」

おうどん「玄関のチャイムが鳴っただけで、うどんを受け取ってもらえるかは別」

Net Services 管理者ガイドの接続テストの章(19c)では、tnsping はサービスのリスナーに到達できるかを確かめるもので、データベースが動いているかまでは確かめない、データベースへの接続は SQL*Plus で試す、と書かれています。
リスナーは玄関の受付係。玄関まで行けても、家の人(データベース)が留守かもしれません。

変更作業の確認は、伝票・帳簿・配達ボード・到着の4段

ここまでを、作業手順に落とします。確認用と変更用を分けて書きます。

確認用:今の伝票と帳簿と配達ボードを並べる

V$PARAMETER が「今のインスタンスの伝票」、V$SPPARAMETER が「SPFILE(次の起動で読まれる帳簿)」です。
この2つの違いは SCOPE=MEMORY・SPFILE・BOTH の記事で詳しく書いたので、ここでは並べて見るだけにします。

set lines 200 pages 100
col name for a24
col memory_value for a40
col spfile_value for a20
select p.name,
       p.value memory_value,
       s.value spfile_value
  from v$parameter p
  join v$spparameter s on s.name = p.name
 where p.name like 'log_archive_dest%'
   and (p.ismodified <> 'FALSE' or s.isspecified = 'TRUE')
 order by p.name;

col destination for a30
col error for a40
col valid_now for a16
select dest_id, status, valid_now, destination, error, fail_date
  from v$archive_dest
 where status <> 'INACTIVE'
 order by dest_id;

今回の検証環境で、LOG_ARCHIVE_DEST_2 を SCOPE=MEMORY だけで変えた状態で実行した結果です。

NAME			 MEMORY_VALUE				  SPFILE_VALUE
------------------------ ---------------------------------------- --------------------
log_archive_dest_2	 SERVICE=nosuch_stby ASYNC VALID_FOR=(ONL
			 INE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAM
			 E=nosuch_stby


   DEST_ID STATUS    VALID_NOW	      DESTINATION		     ERROR				      FAIL_DATE
---------- --------- ---------------- ------------------------------ ---------------------------------------- ------------------
	 2 VALID     YES	      nosuch_stby

SPFILE_VALUE が空です。今は効いているけれど、帳簿には書いていない。再起動したら、この伝票は消えます。
逆に SCOPE=SPFILE だけで変えると、帳簿には書いてあるのに今は効いていない、という形になります。Data Guard のトラブルシューティングの「SPFILE に追加したが、まだ有効にしていない」は、たぶんこの状態です。

新人さん「今の伝票と帳簿、どっちか片方だけ合ってればいいですよね」

おうどん「片方だけ合ってると、今日か、次の再起動の日か、どっちかに出前が迷子になる」

変更用:変える前に書いておくこと

変更のコマンドは、環境ごとの手順書に従うのが前提です。ここでは、作業メモに書いておきたい項目だけ並べます。

項目書いておくこと
前提対象のデータベース(DB_UNIQUE_NAME)・ロール・インスタンス。RAC なら全インスタンスか特定のインスタンスか
変更前の記録上の確認用 SQL の結果(V$PARAMETER・V$SPPARAMETER・V$ARCHIVE_DEST)
変更内容ALTER SYSTEM SET log_archive_dest_n = '...' SCOPE = ... の全文と、STATE_n をどうするか
影響範囲その転送先に REDO が届かなくなる間、何が守られなくなるか(スタンバイの遅れ、バックアップ先への転送など)
反映時期SCOPE=MEMORY・BOTH ならすぐ。SCOPE=SPFILE なら次の起動から
変更後の確認伝票(V$PARAMETER)、帳簿(V$SPPARAMETER)、配達ボード(V$ARCHIVE_DEST)、そして実際に REDO が送られたあとの ERROR・FAIL_DATE と、受け側での受信
戻し方変更前の値に戻す ALTER SYSTEM SET。SPFILE に書いていなかった値なら ALTER SYSTEM RESET

読者「伝票を貼った人と、届いたのを確かめる人が、別の日に別の人だったら?」

それが一番危ない。作業メモの最後に「届いたことを、いつ、誰が見るか」まで書いておきます。

いちばん下の「実際に REDO が送られたあと」が、SHOW PARAMETER では絶対に見えないところです。
ログスイッチなどで REDO が送られるタイミングのあとに、配達ボードの ERROR と FAIL_DATE を見る。受け側(スタンバイやバックアップの基盤)でも、届いたことを確かめる。受け側の見方は製品や構成で変わるので、その製品のドキュメントで確認してください(今回の検証環境には受け側がないので、ここは試していません)。

上級者向け:なぜ ALTER SYSTEM は宛先を確かめないのか

ここから先は上級者向け。読み飛ばしてもOKです。

書式の検査と、宛先の検査は別の段階

今回の実験をまとめると、こうでした。

試したことALTER SYSTEMV$ARCHIVE_DEST
存在しないサービス名(SERVICE=nosuch_stby)成功VALID・YES・ERROR なし
存在しないフォルダ(LOCATION=C:\nosuch_dir_oudon)成功VALID・YES・ERROR なし
属性の書き間違い(ASYNCH)ORA-02097・ORA-16024(変更されない)
STATE_2 を DEFER成功DEFERRED・UNKNOWN
VALID_FOR を STANDBY_ROLE成功VALID・WRONG VALID_ROLE

(今回の検証環境・NOARCHIVELOG での結果をまとめた表です)

受付さん「書式のチェックは私、配達の成否は出前係です」

おうどん「分業としては正しい。問題は、出前係が出発するまで誰も住所を見ないこと」

リファレンスの ERROR の定義が「オープンまたはコピーのときのエラー」である以上、宛先に問題があるかどうかは、オープン(つなぐ・開く)かコピー(送る・書く)のときにわかる、と読むのが自然です。
ALTER SYSTEM の時点で宛先を確かめる仕組みがあるかどうかは、今回の資料では確かめられていません。少なくとも今回の検証環境では、確かめずに受け付けていました。

なお、NOARCHIVELOG でなければ、設定直後にも転送やアーカイブが始まるので、もっと早く ERROR が出るかもしれません。ARCHIVELOG への切り替えは今回の検証環境のルールでしていないので、そこは未確認です。

設定値が同じでも、配達ボードが同じとは限らない

検証中に、もう1つ気づいたことがあります。

最初、何も設定していない状態で V$ARCHIVE_DEST を見ると、1番に行き先が出ていました。

	 1
LOG_ARCHIVE_DEST_1
VALID	  PRIMARY	   C:\app\<user>\product\19.0.0\dbhome_1\RDB
			   MS

(最初の確認で実行した SELECT の出力から1番の行だけを抜き出したものです。列見出しは省略し、パスの一部を伏せています)

LOG_ARCHIVE_DEST_1 は空なのに、配達ボードには Oracle Home の下のフォルダが書かれていて、VALID。

ところが、2番を設定して RESET で戻したあとに見ると、1番は INACTIVE になっていました。

   DEST_ID STATUS    TARGET	      DESTINATION					 ERROR
---------- --------- ---------------- -------------------------------------------------- ----------------------------------------
	 1 INACTIVE  PRIMARY
	 2 INACTIVE  PRIMARY
	 3 INACTIVE  PRIMARY

V$PARAMETER の log_archive_dest_1 〜 3 と STATE は、どれも ISDEFAULT TRUE・ISMODIFIED FALSE で、最初と同じです。SPFILE に書いてあるパラメータの数も、最初と同じ19個でした。
インスタンスを再起動すると、1番は VALID に戻りました。

新人さん「パラメータは全部最初と同じなのに、配達ボードだけ違う……」

おうどん「伝票を全部はがしても、ボードのマグネットは自分では戻らなかった」

なぜこうなるのか(パラメータが空のときの既定の行き先がいつ決まるのか)は、今回読んだ資料には書かれていなかったので、断定しません。NOARCHIVELOG の環境での観察です。
ただ、教訓ははっきりしています。設定値が元どおりでも、稼働状態が元どおりとは限らない。戻したあとも、配達ボードまで見て確かめる。

RAC・ロール切替・転送先の番号

ここは今回の検証環境(シングルインスタンス)では試せないので、リファレンスで確かめた範囲だけ書きます。

  • V$ARCHIVE_DEST は「いまのインスタンス」の情報です。RAC では、どのインスタンスに接続して見ているかを意識します。全インスタンスを並べて見るなら GV$ のビューを使うことになります(RAC での出力は未確認です)
  • LOG_ARCHIVE_DEST_n は PDB の中では変えられません(リファレンスの Modifiable in a PDB は No)。CDB$ROOT で見て、CDB$ROOT で変えます
  • 転送先は1〜31番。LOG_ARCHIVE_DEST_n のリファレンス(19c)によると、11〜31番は SYNC・LOCATION・MANDATORY・ALTERNATE などに対応しません。番号の用途(何番をどこへの転送に使うか)は環境ごとの決めごとなので、番号だけで用途を決めつけないでください
  • 定義した LOG_ARCHIVE_DEST_n には、対応する LOG_ARCHIVE_DEST_STATE_n が必要です。STATE には enable・defer のほか、alternate(ほかの転送先との通信に失敗したら有効になる)、reset(defer と同じだが、前回失敗したときのエラーを消す)もあります

読者「reset でエラーが消えたら、直ったってことですよね」

おうどん「消えたのはエラーの文面。原因は、たぶんまだ住所録の中にいる」

Data Guard のトラブルシューティングの、スイッチオーバー(ロールの切り替え)のあとに REDO が適用されない場合の項でも、新しいプライマリ側の tnsnames.ora、LOG_ARCHIVE_DEST_n の設定、V$ARCHIVE_DEST を確かめるよう書かれています。
切替のあとにだけ問題が出る転送先は、WRONG VALID_ROLE のまま眠っていた伝票かもしれない。切替の前に、眠っている伝票の住所を tnsping と SQL*Plus で確かめておくと、当日の驚きが1つ減ります。

まとめ:伝票を見たら、配達ボードと到着まで見る

冒頭の新人さんの「SHOW PARAMETER で見たら新しい値になってます。完了です!」は、こう言い直せます。

新人さん「伝票は新しい値になっています。配達ボードは VALID・YES で、ERROR はまだありません。ログスイッチのあとにもう一度見て、受け側に届いたことも確かめてから完了にします」

おうどん「完璧。それなら、存在しない住所に出前を出しても、その日のうちに気づける」

20番さん「ところで、私たちはいつ呼ばれるんでしょう」

おうどん「SHOW PARAMETER のたびに、もう来てるよね」

部分一致の皆さんには、これからも勝手に来てもらいましょう。

SHOW PARAMETER は伝票、V$ARCHIVE_DEST は配達ボード、完了の判断は到着の確認。

まずは自分の DB で、V$ARCHIVE_DEST の STATUS・VALID_NOW・ERROR を1回だけ見てみてください。
全部きれいなら、安心してきつねうどんでもどうぞ🍜

参考資料

2026年10月時点の内容です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

おうどん|癒しと創作をたのしむ雑食クリエイター
写経アプリやクレイセラピー、優しい和風デザインがすき。
ZARDと刀剣と文字に癒されて、今はアプリ作ってます。

コメント

コメントする

目次