Oracle歸檔日誌所在目錄時間不對&&Oracle叢集日誌時間顯示錯誤
前言
這個問題在18年的時候遇到了,基本不注意並且叢集或者資料庫執行正常是很難注意到的。
忘記當時怎麼發現的了,最近拿出來重現一下問題。
具體描述一下問題:
比如當前時間是2020年07月03日0點,資料庫對redo log發起歸檔。
在OMF下,歸檔會按照日期進行分類歸檔。
但是發起歸檔之後,新的歸檔檔案會放在的20200702的目錄中。
另外,db和asm和叢集的警告日誌的時間也和作業系統的date時間不一致。
現象
版本:11.2.0.4.0
在我的測試環境中,關閉所有節點的叢集之後,更改時間:
[root@rac1 ~]# date -s "2020-07-03 00:00:00" Fri Jul 3 00:00:00 CST 2020
然後,啟動所有節點的叢集,可以依次觀察
叢集的警告日誌,grid使用者下,$ORACLE_HOME/log/rac1/alertrac1.log
2020-07-02 09:00:26.667: [ohasd(24600)]CRS-2112:The OLR service started on node rac1. 2020-07-02 09:00:26.675: [ohasd(24600)]CRS-1301:Oracle High Availability Service started on node rac1. 2020-07-02 09:00:26.676: [ohasd(24600)]CRS-8017:location: /etc/oracle/lastgasp has 2 reboot advisory log files, 0 were announced and 0 errors occurred 2020-07-02 09:00:30.080: [/u01/app/11.2.0/grid/bin/orarootagent.bin(24643)]CRS-2302:Cannot get GPnP profile. Error CLSGPNP_NO_DAEMON (GPNPD daemon is not running). 2020-07-02 09:00:34.563: [gpnpd(24737)]CRS-2328:GPNPD started on node rac1. 2020-07-02 09:00:36.992: [cssd(24806)]CRS-1713:CSSD daemon is started in clustered mode 2020-07-02 09:00:38.798: [ohasd(24600)]CRS-2767:Resource state recovery not attempted for 'ora.diskmon' as its target state is OFFLINE 2020-07-02 09:01:01.319: [cssd(24806)]CRS-1707:Lease acquisition for node rac1 number 1 completed 2020-07-02 09:01:02.612: [cssd(24806)]CRS-1605:CSSD voting file is online: /dev/mapper/asm-ocr02; details in /u01/app/11.2.0/grid/log/rac1/cssd/ocssd.log. 2020-07-02 09:01:02.620: [cssd(24806)]CRS-1605:CSSD voting file is online: /dev/mapper/asm-ocr03; details in /u01/app/11.2.0/grid/log/rac1/cssd/ocssd.log. 2020-07-02 09:01:02.623: [cssd(24806)]CRS-1605:CSSD voting file is online: /dev/mapper/asm-ocr01; details in /u01/app/11.2.0/grid/log/rac1/cssd/ocssd.log. 2020-07-02 09:01:15.917: [cssd(24806)]CRS-1601:CSSD Reconfiguration complete. Active nodes are rac1 rac2 . 2020-07-02 09:01:18.061: [ctssd(25418)]CRS-2403:The Cluster Time Synchronization Service on host rac1 is in observer mode. 2020-07-02 09:01:18.421: [ctssd(25418)]CRS-2407:The new Cluster Time Synchronization Service reference node is host rac1. 2020-07-02 09:01:18.422: [ctssd(25418)]CRS-2401:The Cluster Time Synchronization Service started on host rac1. 2020-07-02 09:01:20.023: [ohasd(24600)]CRS-2767:Resource state recovery not attempted for 'ora.diskmon' as its target state is OFFLINE [client(25475)]CRS-10001:02-Jul-20 09:01 ACFS-9391: Checking for existing ADVM/ACFS installation. [client(25480)]CRS-10001:02-Jul-20 09:01 ACFS-9392: Validating ADVM/ACFS installation files for operating system. [client(25482)]CRS-10001:02-Jul-20 09:01 ACFS-9393: Verifying ASM Administrator setup. [client(25485)]CRS-10001:02-Jul-20 09:01 ACFS-9308: Loading installed ADVM/ACFS drivers. [client(25488)]CRS-10001:02-Jul-20 09:01 ACFS-9154: Loading 'oracleoks.ko' driver. [client(25521)]CRS-10001:02-Jul-20 09:01 ACFS-9154: Loading 'oracleadvm.ko' driver. [client(25548)]CRS-10001:02-Jul-20 09:01 ACFS-9154: Loading 'oracleacfs.ko' driver.
........
ASM例項警告日誌,
Thu Jul 02 09:01:26 2020 NOTE: No asm libraries found in the system NOTE: No asm libraries found in the system MEMORY_TARGET defaulting to 1128267776. * instance_number obtained from CSS = 1, checking for the existence of node 0... * node 0 does not exist. instance_number = 1 Starting ORACLE instance (normal) WARNING: You are trying to use the MEMORY_TARGET feature. This feature requires the /dev/shm file system to be mounted for at least 1140850688 bytes. /dev/shm is either not mounted or is mounted with available space less than this size. Please fix this so that MEMORY_TARGET can work as expected. Current available is 976789504 and used is 73728 bytes. Ensure that the mount point is /dev/shm for this directory. LICENSE_MAX_SESSION = 0 LICENSE_SESSIONS_WARNING = 0 Initial number of CPU is 4 Number of processor cores in the system is 4 Number of processor sockets in the system is 2 Private Interface 'eth1:1' configured from GPnP for use as a private interconnect. [name='eth1:1', type=1, ip=169.254.146.181, mac=00-0c-29-60-50-8b, net=169.254.0.0/16, mask=255.255.0.0, use=haip:cluster_interconnect/62] Public Interface 'eth0' configured from GPnP for use as a public interface. [name='eth0', type=1, ip=192.168.180.100, mac=00-0c-29-60-50-81, net=192.168.180.0/24, mask=255.255.255.0, use=public/1] Picked latch-free SCN scheme 3 Using LOG_ARCHIVE_DEST_1 parameter default value as /u01/app/11.2.0/grid/dbs/arch Autotune of undo retention is turned on. LICENSE_MAX_USERS = 0 SYS auditing is disabled NOTE: Volume support enabled Starting up: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Real Application Clusters and Automatic Storage Management options. ORACLE_HOME = /u01/app/11.2.0/grid System name: Linux Node name: rac1.example.com Release: 2.6.32-573.el6.x86_64 Version: #1 SMP Wed Jul 1 18:23:37 EDT 2015 Machine: x86_64 VM name: VMWare Version: 6 Using parameter settings in server-side spfile +OCR/rac-cluster/asmparameterfile/registry.253.1034884609
DB的警告日誌,
Thu Jul 02 09:02:47 2020 Adjusting the default value of parameter parallel_max_servers from 160 to 120 due to the value of parameter processes (150) Starting ORACLE instance (normal) LICENSE_MAX_SESSION = 0 LICENSE_SESSIONS_WARNING = 0 Initial number of CPU is 4 Number of processor cores in the system is 4 Number of processor sockets in the system is 2 Private Interface 'eth1:1' configured from GPnP for use as a private interconnect. [name='eth1:1', type=1, ip=169.254.146.181, mac=00-0c-29-60-50-8b, net=169.254.0.0/16, mask=255.255.0.0, use=haip:cluster_interconnect/62] Public Interface 'eth0' configured from GPnP for use as a public interface. [name='eth0', type=1, ip=192.168.180.100, mac=00-0c-29-60-50-81, net=192.168.180.0/24, mask=255.255.255.0, use=public/1] Public Interface 'eth0:2' configured from GPnP for use as a public interface. [name='eth0:2', type=1, ip=192.168.180.111, mac=00-0c-29-60-50-81, net=192.168.180.0/24, mask=255.255.255.0, use=public/1] Picked latch-free SCN scheme 3 Autotune of undo retention is turned on. LICENSE_MAX_USERS = 0 SYS auditing is disabled Starting up: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, OLAP, Data Mining and Real Application Testing options. ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1 System name: Linux Node name: rac1.example.com Release: 2.6.32-573.el6.x86_64
可以看到,日誌開頭全都是2020年07月02日的9點初。
我們再看看歸檔的情況,
在此之前,先刪除之前的所有歸檔便於觀察。
[oracle@rac2 ~]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Fri Jul 3 00:20:01 2020 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ZKM (DBID=4210149549) RMAN> delete force noprompt archivelog all; using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=200 instance=zkm2 device type=DISK List of Archived Log Copies for database with db_unique_name ZKM ===================================================================== Key Thrd Seq S Low Time ------- ---- ------- - --------- 91 1 56 A 02-JUL-20 Name: +ARCH/zkm/archivelog/2020_07_03/thread_1_seq_56.303.1044695873 92 2 21 A 02-JUL-20 Name: +ARCH/zkm/archivelog/2020_07_02/thread_2_seq_21.299.1044695875 deleted archived log archived log file name=+ARCH/zkm/archivelog/2020_07_03/thread_1_seq_56.303.1044695873 RECID=91 STAMP=1044749873 deleted archived log archived log file name=+ARCH/zkm/archivelog/2020_07_02/thread_2_seq_21.299.1044695875 RECID=92 STAMP=1044695874 Deleted 2 objects
其中一個節點發出命令歸檔redo log,
SYS@zkm1> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; Session altered. SYS@zkm1> SYS@zkm1> select sysdate from dual; SYSDATE ------------------------ 2020-07-03 00:20:27 SYS@zkm1> alter system archive log current; System altered.
觀察警告日誌,顯示的時間是“Thu Jul 02 09:20:32 2020”。
Thu Jul 02 09:20:32 2020 Thread 1 advanced to log sequence 58 (LGWR switch) Current log# 2 seq# 58 mem# 0: +DATA/zkm/onlinelog/group_2.258.1034889845 Current log# 2 seq# 58 mem# 1: +ARCH/zkm/onlinelog/group_2.258.1034889845 Thu Jul 02 09:20:32 2020 Archived Log entry 93 added for thread 1 sequence 57 ID 0xfaf1eead dest 1:
進去ASM磁碟檢視檔案情況,
ASMCMD> ls -l Type Redund Striped Time Sys Name Y 2020_07_02/ ASMCMD> ls -l * Type Redund Striped Time Sys Name ARCHIVELOG UNPROT COARSE JUL 02 09:00:00 Y thread_1_seq_57.299.1044696033 ARCHIVELOG UNPROT COARSE JUL 02 09:00:00 Y thread_2_seq_22.303.1044696033 ASMCMD> pwd +arch/zkm/ARCHIVELOG
至此,問題完全重現成功。
原因
不知道各位發現沒有,實際上最開始啟動叢集(crsctl start crs)那一瞬間(大概是2020-07-03 00:00:00多,剛改完時間不到1分鐘),
叢集的警告日誌最開始出現的時間為“2020-07-02 09:00:26.667:”,基本相差15小時。
因此很容易也可以猜出,是由於時區的原因。
系統的時區為:
[grid@rac1 ~]$ cat /etc/sysconfig/clock # The time zone of the system is defined by the contents of /etc/localtime. # This file is only for evaluation by system-config-date, do not rely on its # contents elsewhere. ZONE="Asia/Shanghai"
那麼,叢集應該也有自己的配置檔案對應的時區,也就是叢集不依賴OS的時區(-_-||)。
mos可以找到這麼一篇文章:How To Change Timezone for Grid Infrastructure (Doc ID 1209444.1)
因此可以發現Grid Infrastructure的時區配置檔案位置在$GRID_HOME/crs/install/s_crsconfig_<nodename>_env.txt。
所以,現象的模擬其實,就是我把該檔案的時區改成如下了:
[grid@rac1 ~]$ cd $ORACLE_HOME/crs/install [grid@rac1 install]$ ls cmdllroot.sh crsconfig_lib.pm crsdelete.pm inittab installRemove.excl oracle-ohasd.conf paramfile.crs rootcrs.pl s_crsconfig_defs s_crsconfig_rac1_env.txt.bak crsconfig_addparams.sbs crsconfig_params crspatch.pm install.excl onsconfig oracle-ohasd.service ParentDirPerm_rac1.txt roothas.pl s_crsconfig_lib.pm tfa_setup.sh crsconfig_fileperms.excl crsconfig_params.sbs hasdconfig.pl install.incl oraacfs.pm oracss.pm preupdate.sh rootofs.sh s_crsconfig_rac1_env.txt [grid@rac1 install]$ cat s_crsconfig_rac1_env.txt ### This file can be used to modify the NLS_LANG environment variable, which determines the charset to be used for messages. ### For example, a new charset can be configured by setting NLS_LANG=JAPANESE_JAPAN.UTF8 ### Do not modify this file except to change NLS_LANG, or under the direction of Oracle Support Services TZ=US/Pacific NLS_LANG=AMERICAN_AMERICA.AL32UTF8 TNS_ADMIN= ORACLE_BASE=
網上找找看是不是剛好和上海時間相差15個小時。
得證!!!