カテゴリー: Oracle

  • メモ:Oracle Cloud で、Oracle DB 11g R2のサポート終了していた

    古い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日に終了なので、結構前の終了だ。まぁ、古いし、そうなるか。

  • CTIMEの単位は秒

    Oracle DatabaseのV$LOCKテーブルのCTIMEの単位は秒。

    CTIME: 3600

    の場合は、3600秒なので、1時間。

  • Oracle DBの起動後にTrancateを実行するとエラーになる

    Oracle DBの起動後、すぐのタイミングの場合、DBのステータスがOPENになっていても、DBが上がりきっていないことがある。そのときに、TrancateなどのDDL文を実行しても、エラーになることがある。

  • Oracleカレンダー

    Oracleの2020年のカレンダー

    普通のカレンダー。シンプルでワンポイントの社用犬がいい。昨年はゲット出来なくて、マイクロソフトのカレンダーだった(それもシンプルで良かった、紙質良かったし)。Oracleのカレンダーの紙がちょっと薄いのが気になる。

  • Oracleクライアントと接続先のDBで時間が大きくずれても、TNS-12638は発生する

    急にOracle Databaseとの接続時にTNS-12638のエラーが発生するようになった。

    TNS-12638: 資格証明の取出しに失敗しました。
    

    いろいろと調べてみると、何かをトリガーにして急に発生することがあるらしい。 トリガーとなった原因を調べていくと、ログの出力時間が異なっていることを発見。 DBサーバ側の時間が数時間ずれている(タイムゾーンではなく、時間がずれている)ことが判明。 DBサーバの時間を修正したところ、TNS-12638が解消。

    設定云々の前に、時間がずれていても認証エラーは発生することがわかった。いろいろとあるものだ。

  • MSFC上のOracleDBのTNSNAMES.ORA

    MSFC(Microsoft Failover Cluster)上に構築されたOracle Database(Oracle Fail Safe使用) は、MSFCの構成上、共有ディスクではなく、ローカルのドライブ(Cドライブなど)にインストールする。

    そのため、MSFC上のOracle DBの「TNSNAMES.ORA」は、MSFCの各ノードに対して、 変更や作成を行う必要がある。TNSNAMES.ORAは、$ORACLE_HOME\ の下のフォルダ配下に存在する。

    DBのファイルなどとは違い、共有リソース上にはないので注意すること。

  • SYS.DBMS_LOCK権限を割り当て

    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>
    
  • システムバックアップからリストアしたところ、OSは正常起動したがOracleDBが自動で立ち上がらなくなった。

    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が自動起動しなくなった、ということ。

  • Oracle Databaseで特定時間のSCNを調べる

    現在のSCNではなく、過去の特定の時間のSCNを調べるには、下記のSQL文を実行する

    SELECT timestamp_to_scn(指定時間) from dual;
    

    実際に実行したSQL文。

    SELECT timestamp_to_scn('20171217 13:56:00') from dual;
    
  • Oracle Databaseで現在のSCNを調べる

    Oracle Databaseで、現在のSCN(システム・チェンジ・ナンバー)を調べたいときの調査方法。

    SELECT CURRENT_SCN FROM v$database;
    

    SCN使用のシーンとしては、フラッシュバッククエリで、時間指定が難しいくらいの変更があるときにSCNで指定するので、SCNを調べるときに使う。