Kiến thức quản trị

Sysdate Database khác với thời gian trên OS

Thời gian vừa rồi, một khách hàng bên mảng Viễn thông hỏi tôi: ” Kết nối từ ứng dụng vào CSDL kiểm tra thấy SYSDATE bị lệch so với thời gian thực tế”.

Dưới đây tôi sẽ giả lập tình huống này và chỉ ra phương án giải quyết đã áp dụng với khách hàng.

Thông tin về môi trường trong bài viết:

Database: Oracle database 11.2.0.1

OS: Redhat 5.3 

Tình huống hiện tại đang có sự sai khác giữa SYSDATE trong CSDL và DATE trên OS

[[email protected] ~]

$ sqlplus [email protected] as sysdba
SQL> select to_char(sysdate,'dd-mm-yyyy hh24:mi:ss') as datedb from dual;
DATEDB
-------------------
13-04-2017 03:43:06

-> Thời gian ghi nhận trên Database đang là 3:43:06 ngày 13/04/2017. Tiếp đó chúng ta kiểm tra thời gian trên OS

SQL> !date
Thu Apr 13 21:43:21 ICT 2017

-> Thời gian trên OS là 21:43:21 ngày 13/04/2017.

Thông tin trên OS trong trường hợp này là thông tin chuẩn xác. Database ghi nhận thời gian sai là do tại thời điểm start database, TimeZone của database đã bị thiết lập sai.

Phương án xử lý

  • Bước 1: Thiết lập lại TimeZone chính xác (trong trường hợp này TimeZone chính xác phải là Asia/Saigon) và restart lại database để tiến trình PMON cập nhật lại thông tin về TimeZone.
[[email protected] ~]$ export TZ=Asia/Saigon
[[email protected] ~]$ sqlplus [email protected] as sysdba
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down. SQL> startup
ORACLE instance started.
Total System Global Area 577511424 byte
Fixed Size 1338000 bytes
Variable Size 461374832 bytes
Database Buffers 109051904 bytes
Redo Buffers 5746688 bytes
Database mounted.
Database opened.
  • Bước 2: Kiểm tra và xác nhận thông tin SYSDATE đã được điều chỉnh chính xác
SQL> select to_char(sysdate,'dd-mm-yyyy hh24:mi:ss') as datedb from dual;
DATEDB
-------------------
13-04-2017 21:49:39 # Kiểm tra thông tin thời gian trên OS SQL> !date
Thu Apr 13 21:49:42 ICT 2017
  • P/S: Thông tin chi tiết từng TimeZone có thể xem tại: https://docs.oracle.com/cd/B13866_04/webconf.904/b10877/timezone.htm
  • Trong bài viết này, phần demo tôi đã sử dụng TZ=Pacific/Pago_Pago

Thân ái,

Đồng hành cùng doanh nghiệp vượt qua khó khăn giai đoạn Covid-19, chúng tôi tặng bạn Voucher giảm giá 60% dịch vụ kiểm tra sức khỏe cơ sở dữ liệu toàn diện, dịch vụ Database Health Check giúp CSDL của bạn luôn khỏe mạnh!
Chi tiết xem tại đây!

Vì sao phải kiểm tra sức khỏe cơ sở dữ liệu định kì?

Leave a Reply

avatar
  Subscribe  
Notify of