如何修改資料庫時區
首先确認會話時區是否正确,會話時區可能和資料庫時區不一緻
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