q2009a06z22 发表于 2018-9-23 08:10:08

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'
  *
  ERROR at line 1:
  ORA-30079: cannot>TIMESTAMP WITH LOCAL TIME ZONE columns
  主要问题就是因为上面红色字体标注,即使用了本地时区列,为了查找这个列,查了不少资料。
  --查找有问题的表
  SQL> select u.name || '.' || o.name || '.' || c.name
  2TSLTZcolumn from sys.obj$ o, sys.col$ c, sys.user$ u
  3where 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>>
  Table>  --再次设置时区

  SQL>>
  Database>  SQL> startup force;
  ORACLE instance started.
  Total System Global Area608174080 bytes

  Fixed>
  Variable>  Database Buffers          402653184 bytes
  Redo Buffers                7163904 bytes
  Database mounted.
  Database opened.
  --再次查看时区
  SQL> select dbtimezone from dual;
  DBTIME
  ------
  +08:00
  到此时区就已经设置正确了

页: [1]
查看完整版本: oracle dbtimezone的问题