天天看點

如何修改資料庫時區

如何修改資料庫時區

首先确認會話時區是否正确,會話時區可能和資料庫時區不一緻

SQL> SELECT SESSIONTIMEZONE FROM DUAL;

SESSIONTIMEZONE

---------------------------------------------------------------------------

+08:00

會話時區是北京時區

SQL> SELECT DBTIMEZONE FROM DUAL;

DBTIME

------

+00:00

DB是世界時區

SQL> SELECT TZ_OFFSET(SESSIONTIMEZONE), TZ_OFFSET(DBTIMEZONE) FROM DUAL;

TZ_OFFS TZ_OFFS

------- -------

+08:00  +00:00

1.檢查資料庫是否有這樣的字段類型 TIMESTAMP WITH LOCAL TIME ZONE 

SQL>select c.owner || '.' || c.table_name || '(' || c.column_name || ') -'

    || c.data_type || ' ' col

  from dba_tab_cols c, dba_objects o

 where c.data_type like '%WITH LOCAL TIME ZONE'

    and c.owner=o.owner

   and c.table_name = o.object_name

   and o.object_type = 'TABLE'

order by col

/

SQL>select u.name || '.' || o.name || '.' || c.name TSLTZcolumn

  from sys.obj$ o, sys.col$ c, sys.user$ u

 where c.type# = 231

   and o.obj# = c.obj#

   and u.user# = o.owner#;

2.檢查目前資料庫時區

SQL> select * from database_properties where property_name='DBTIMEZONE';

行将被截斷

PROPERTY_NAME                  PROPERTY_VALUE

------------------------------ -------------------------------------------------

DBTIMEZONE                     00:00

3.改變資料庫時區

SQL> ALTER DATABASE SET TIME_ZONE = '+8:00';

資料庫已更改。

SQL> shutdown immediate

資料庫已經關閉。

已經解除安裝資料庫。

ORACLE 例程已經關閉。

SQL> startup

ORACLE 例程已經啟動。

Total System Global Area  272629760 bytes

Fixed Size                  1248528 bytes

Variable Size              92275440 bytes

Database Buffers          171966464 bytes

Redo Buffers                7139328 bytes

資料庫裝載完畢。

資料庫已經打開。

SQL> select dbtimezone from dual;

4.檢查時間

SQL> select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual

SQL> SELECT SYSTIMESTAMP FROM dual;

SYSTIMESTAMP

23-7月 -09 11.50.25.750000 上午 +08:00