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

到此时区就已经设置正确了

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