اوراکل 23ai – اجرای sysdate بر اساس time zone هر PDB

همانطور که می دانید توابع SYSDATE و SYSTIMESTAMP ساعت جاری سیستم را برمی گردانند این توابع date را بر اساس time zone سیستم عامل نمایش می دهند و اگر time zone متفاوتی برای دیتابیس تنظیم شود، تغییری در رفتار این توابع ایجاد نمی شود:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[oracle@OEL8 ~]$ timedatectl
Local time: Thu 2024-02-15 13:14:48 +0330
Universal time: Thu 2024-02-15 09:44:48 UTC
RTC time: Thu 2024-02-15 07:37:09
Time zone: Asia/Tehran (+0330, +0330)
[oracle@OEL8 ~]$ timedatectl Local time: Thu 2024-02-15 13:14:48 +0330 Universal time: Thu 2024-02-15 09:44:48 UTC RTC time: Thu 2024-02-15 07:37:09 Time zone: Asia/Tehran (+0330, +0330)
[oracle@OEL8 ~]$ timedatectl
               Local time: Thu 2024-02-15 13:14:48 +0330
           Universal time: Thu 2024-02-15 09:44:48 UTC
                 RTC time: Thu 2024-02-15 07:37:09
                Time zone: Asia/Tehran (+0330, +0330)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> select sysdate , SYSTIMESTAMP ;
SYSDATE SYSTIMESTAMP
--------- ----------------------------------------
15-FEB-24 15-FEB-24 01.25.54.270895 PM +03:30
SQL> ALTER DATABASE SET TIME_ZONE='Asia/Tokyo';
Database altered.
SQL> select sysdate , SYSTIMESTAMP ;
SYSDATE SYSTIMESTAMP
--------- ----------------------------------------
15-FEB-24 15-FEB-24 01.26.37.200429 PM +03:30
SQL> select sysdate , SYSTIMESTAMP ; SYSDATE SYSTIMESTAMP --------- ---------------------------------------- 15-FEB-24 15-FEB-24 01.25.54.270895 PM +03:30 SQL> ALTER DATABASE SET TIME_ZONE='Asia/Tokyo'; Database altered. SQL> select sysdate , SYSTIMESTAMP ; SYSDATE SYSTIMESTAMP --------- ---------------------------------------- 15-FEB-24 15-FEB-24 01.26.37.200429 PM +03:30
SQL> select sysdate , SYSTIMESTAMP ;
SYSDATE   SYSTIMESTAMP
--------- ----------------------------------------
15-FEB-24 15-FEB-24 01.25.54.270895 PM +03:30

SQL> ALTER DATABASE SET TIME_ZONE='Asia/Tokyo';
Database altered.

SQL> select sysdate , SYSTIMESTAMP ;
SYSDATE   SYSTIMESTAMP
--------- ----------------------------------------
15-FEB-24 15-FEB-24 01.26.37.200429 PM +03:30

در نسخه 23ai می توان با تنظیم پارامتر time_at_dbtimezone به مقدار USER_SQL این توابع را مجاب کرد تا date را بر اساس time zone دیتابیس برگردانند صرف نظر از time zone سیستم عامل!

در ادامه برای هر کدام از PDBهای موجود در دیتابیس، time zone متفاوتی را تنظیم می کنیم:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> alter session set container=TOKYOPDB;
Session altered.
SQL> ALTER DATABASE SET TIME_ZONE='Asia/Tokyo';
System altered.
SQL> alter session set container=TEHRANPDB;
Session altered.
SQL> ALTER DATABASE SET TIME_ZONE='Asia/Tehran';
Database altered.
SQL> alter session set container=TOKYOPDB; Session altered. SQL> ALTER DATABASE SET TIME_ZONE='Asia/Tokyo'; System altered. SQL> alter session set container=TEHRANPDB; Session altered. SQL> ALTER DATABASE SET TIME_ZONE='Asia/Tehran'; Database altered.
SQL> alter session set container=TOKYOPDB;
Session altered.
SQL> ALTER DATABASE SET TIME_ZONE='Asia/Tokyo';
System altered.
SQL> alter session set container=TEHRANPDB;
Session altered.
SQL> ALTER DATABASE SET TIME_ZONE='Asia/Tehran';
Database altered.

پارامتر time_at_dbtimezone را هم به مقدار USER_SQL تنظیم کرده و دیتابیس را restart می کنیم:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> alter system set time_at_dbtimezone=USER_SQL scope=spfile;
System altered.
SQL> startup force;
SQL> alter system set time_at_dbtimezone=USER_SQL scope=spfile; System altered. SQL> startup force;
SQL> alter system set time_at_dbtimezone=USER_SQL scope=spfile;
System altered.
SQL> startup force;

خواهیم دید که این توابع در هر PDB مقدار متفاوتی را برمیگردانند:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> alter session set container=TOKYOPDB;
Session altered.
SQL> select sysdate , SYSTIMESTAMP ;
SYSDATE SYSTIMESTAMP
--------- ----------------------------------------
15-FEB-24 15-FEB-24 07.13.36.575056 PM ASIA/TOKYO
SQL> alter session set container=TOKYOPDB; Session altered. SQL> select sysdate , SYSTIMESTAMP ; SYSDATE SYSTIMESTAMP --------- ---------------------------------------- 15-FEB-24 15-FEB-24 07.13.36.575056 PM ASIA/TOKYO
SQL> alter session set container=TOKYOPDB;
Session altered.
SQL> select sysdate , SYSTIMESTAMP ;
SYSDATE   SYSTIMESTAMP
--------- ----------------------------------------
15-FEB-24 15-FEB-24 07.13.36.575056 PM ASIA/TOKYO
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
SQL> alter session set container=TEHRANPDB;
Session altered.
SQL> select sysdate , SYSTIMESTAMP ;
SYSDATE SYSTIMESTAMP
--------- ----------------------------------------
15-FEB-24 15-FEB-24 01.43.47.339588 PM ASIA/TEHRAN
SQL> alter session set container=TEHRANPDB; Session altered. SQL> select sysdate , SYSTIMESTAMP ; SYSDATE SYSTIMESTAMP --------- ---------------------------------------- 15-FEB-24 15-FEB-24 01.43.47.339588 PM ASIA/TEHRAN
SQL> alter session set container=TEHRANPDB;
Session altered.
SQL> select sysdate , SYSTIMESTAMP ;
SYSDATE   SYSTIMESTAMP
--------- ----------------------------------------
15-FEB-24 15-FEB-24 01.43.47.339588 PM ASIA/TEHRAN

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *