古いOracle Databaseの稼働できる環境を調べてみたのだが、Oracle Cloudでは、Oracle DB 11g R2(Oracle Database 11.2.0.4)のサポート終了していた。
https://blogs.oracle.com/oracle4engineer/post/database-11gr2-support-end
2021年3月31日に終了なので、結構前の終了だ。まぁ、古いし、そうなるか。
古いOracle Databaseの稼働できる環境を調べてみたのだが、Oracle Cloudでは、Oracle DB 11g R2(Oracle Database 11.2.0.4)のサポート終了していた。
https://blogs.oracle.com/oracle4engineer/post/database-11gr2-support-end
2021年3月31日に終了なので、結構前の終了だ。まぁ、古いし、そうなるか。
Oracle DatabaseのV$LOCKテーブルのCTIMEの単位は秒。
CTIME: 3600
の場合は、3600秒なので、1時間。
Oracle DBの起動後、すぐのタイミングの場合、DBのステータスがOPENになっていても、DBが上がりきっていないことがある。そのときに、TrancateなどのDDL文を実行しても、エラーになることがある。

普通のカレンダー。シンプルでワンポイントの社用犬がいい。昨年はゲット出来なくて、マイクロソフトのカレンダーだった(それもシンプルで良かった、紙質良かったし)。Oracleのカレンダーの紙がちょっと薄いのが気になる。
急にOracle Databaseとの接続時にTNS-12638のエラーが発生するようになった。
TNS-12638: 資格証明の取出しに失敗しました。
いろいろと調べてみると、何かをトリガーにして急に発生することがあるらしい。 トリガーとなった原因を調べていくと、ログの出力時間が異なっていることを発見。 DBサーバ側の時間が数時間ずれている(タイムゾーンではなく、時間がずれている)ことが判明。 DBサーバの時間を修正したところ、TNS-12638が解消。
設定云々の前に、時間がずれていても認証エラーは発生することがわかった。いろいろとあるものだ。
MSFC(Microsoft Failover Cluster)上に構築されたOracle Database(Oracle Fail Safe使用) は、MSFCの構成上、共有ディスクではなく、ローカルのドライブ(Cドライブなど)にインストールする。
そのため、MSFC上のOracle DBの「TNSNAMES.ORA」は、MSFCの各ノードに対して、 変更や作成を行う必要がある。TNSNAMES.ORAは、$ORACLE_HOME\ の下のフォルダ配下に存在する。
DBのファイルなどとは違い、共有リソース上にはないので注意すること。
Oracle DatabaseでDBMS_LOCK権限の割り当てと確認方法。
■DBMS_LOCK権限を付与する
※DBAで実施
GRANT EXECUTE ON SYS.DBMS_LOCK TO ユーザ名;
■オブジェクト権限を確認するSELECT文
SELECT * FROM dba_tab_privs;
SELECT * FROM dba_tab_privs where GRANTEE = '確認するユーザ' ;
■確認結果
SQL> SELECT * FROM dba_tab_privs where GRANTEE = 'OracleUSER' ; GRANTEE OWNER ------------------------------ ------------------------------ TABLE_NAME GRANTOR ------------------------------ ------------------------------ PRIVILEGE GRA HIE ---------------------------------------- --- --- OracleUSER SYS DBMS_LOCK SYS EXECUTE NO NO SQL>
OracleがインストールされたWindowsサーバをシャットダウンし、システムバックアップを取得し、データファイルを保存している先のiSCSIディスクのバックアップも取得し、完全な静止点のバックアップを作成した。作業後、静止点のシステムバックアップからリストアを実施。リストア後、OS(Windows)は正常起動し、iSCSIについても問題はなかった。
しかし、OracleDBの接続確認したところ、「ORA-01034」が発生し、Oracle DBが正常に起動していなかった。Windowsのイベントログも確認したが、特に変なエラーはなし。唯一、Oracle DB起動時に権限系のエラーが出ていた。完全な静止点でのバックアップだったので、SCN番号も関係なし。しかも手動で`startup`すると正常にOracle DBが起動して使えるようになった。
試行錯誤で、Windows OSの再起動も試したが、事象が再現するだけ。アーカイブログモードもオフにしてみたが状況は変わらず。ドメインへの再参加も実施したが変わらず。いろいろと試したが状況は変わらず。ひとつひとつ切り分けていった結果、原因を特定した。
原因は、WindowsのOSが起動時に、iSCSIディスクがマウントされる前に、Oracle DBのサービスが起動していたため、データファイルがマウントできず、起動が失敗していた。
対応として、Oracle DBのサービスを開始遅延で設定。これで、先にiSCSIドライブがマウントされるようになり、自動起動するようになった。
今までは、たまたま起動順としてiSCSIのサービスが先に起動していただけ。それがイメージバックアップからのリストアがトリガーとなり、起動順番が変わり、Oracle DBが自動起動しなくなった、ということ。
現在のSCNではなく、過去の特定の時間のSCNを調べるには、下記のSQL文を実行する
SELECT timestamp_to_scn(指定時間) from dual;
実際に実行したSQL文。
SELECT timestamp_to_scn('20171217 13:56:00') from dual;
Oracle Databaseで、現在のSCN(システム・チェンジ・ナンバー)を調べたいときの調査方法。
SELECT CURRENT_SCN FROM v$database;
SCN使用のシーンとしては、フラッシュバッククエリで、時間指定が難しいくらいの変更があるときにSCNで指定するので、SCNを調べるときに使う。