oracle dbtimezone的問題

 oracle時區問題

   今天突然發現oracle數據庫時區不對,所以通過查找各種資料來解決了,特寫下供以後碰到類似問題時方便處理。

--查看當前數據庫系統的時區

   SQL> select dbtimezone from dual;

 DBTIME

 ------

 +00:00

--查看當前數據庫的時間

SQL> select to_char

  2  (sysdate,'yyyymmdd hh24:mi:ss') from dual;

 

TO_CHAR(SYSDATE,'

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

20121017 16:58:26

--修改時區

SQL> alter database set time_zone='+8:00';

alter database set time_zone='+8:00'

*

ERROR at line 1:

ORA-30079: cannot alter database timezone when database has TIMESTAMP WITH LOCAL TIME ZONE columns

主要問題就是因爲上面紅色字體標註,即使用了本地時區列,爲了查找這個列,查了不少資料。

--查找有問題的表

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

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

  3  where c.type# = 231 and o.obj# = c.obj# and u.user# = o.owner#;

 

TSLTZCOLUMN

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

OE.ORDERS.ORDER_DATE  

就是上面這個這個表中的列採用了 timestamp with local timezone

--查看oe.orders表的屬性

SQL> desc oe.orders

 Name                                      Null?    Type

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

 ORDER_ID                                  NOT NULL NUMBER(12)

 ORDER_DATE                                NOT NULL TIMESTAMP(6) WITH LOCAL TIME

                                                     ZONE

 ORDER_MODE                                         VARCHAR2(8)

 CUSTOMER_ID                               NOT NULL NUMBER(6)

 ORDER_STATUS                                       NUMBER(2)

 ORDER_TOTAL                                        NUMBER(8,2)

 SALES_REP_ID                                       NUMBER(6)

 PROMOTION_ID                                       NUMBER(6)

--刪除此列

SQL> alter table oe.orders drop column order_date;

 

Table altered.

--再次設置時區

SQL> alter database set time_zone='+8:00';

 

Database altered.

SQL> startup force;  

ORACLE instance started.

Total System Global Area  608174080 bytes

Fixed Size                  1220820 bytes

Variable Size             197136172 bytes

Database Buffers          402653184 bytes

Redo Buffers                7163904 bytes

Database mounted.

Database opened.

--再次查看時區

SQL> select dbtimezone from dual;

DBTIME

------

+08:00

到此時區就已經設置正確了

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章