Oracle增強型日期函數
--修改資料庫時區為東八區
ALTER DATABASE SET TIME_ZONE='+08:00';
/*
在修改過程中可能會出現錯誤提示:ORA-30079: 當資料庫有TIMESTAMP WITH LOCAL TIMEZONE列時不能變更資料庫時區
這是因為當前資料庫中已有的表中存在列,列的類型定義為了TIMESTAMP WITH LOCAL TIME ZONE
所以資料庫不允許修改資料庫時區
接下來需要通過語句找到是哪些表的列引起的這個問題,查詢語句如下:
**/
--檢查是否有影響修改時區的欄位存在
SELECT u.name || '.' || o.name || '.' || c.name TSLTZcolumn
FROMsys.obj$ o, sys.col$ c, sys.user$ u
WHERE c.type# = 231
AND o.obj# = c.obj#
AND u.user# = o.owner#;
--刪除影響欄位所在的表
DROP TABLE OE.ORDERS;
--如果提示有外鍵引用影響,可以考慮清楚列上資料後,更改資料類型為TIMESTAMP(6)
ALTER TABLE oe.orders MODIFY oe.orders.order_date (TIMESTAMP(6));
--建議清楚資源回收筒
PURGE RECYCLEBIN;
--SQLPLUS命令視窗執行重啟資料庫操作
SQL>SHUTDOWN IMMEDIATE
SQL>STARTUP
--重新串連會話,查詢資料庫時區是否可以更改
ALTER DATABASESE TTIME_ZONE='+08:00';
--更改成功後,查詢是否是東八區,即:+08:00
SELECT DBTIMEZONE FROM DUAL;
--修改本次會話時區的4種方式
SQL> ALTER SESSION SET TIME_ZONE = local;
SQL> ALTER SESSION SET TIME_ZONE = dbtimezone;
SQL> ALTER SESSION SET TIME_ZONE = '+08:00';
SQL> ALTER SESSION SET TIME_ZONE = 'Europe/London';
--查詢會話時區
SELECT SESSION TIMEZONE FROM DUAL;
--查詢當前資料庫所在伺服器系統時間
SELECT SYSDATE FROM DUAL
/*
3種不同類型的時間戳記
普通的時間戳記:TIMESTAMP,預設經度保留小數點後6位,最大經度是9位
資料庫中設定的時間戳記:TIMESTAMP WITH TIME ZONE
當前作業系統所在時區的時間戳記:TIMESTAMP WITH LOCAL TIME ZONE
**/
--建立一張暫存資料表,定義3列時間,類型分別是上面3種類型
CREATE TABLE word_time
(currtime TIMESTAMP,
dbtime TIMESTAMP WITH TIME ZONE,
local_time TIMESTAMP WITH LOCAL TIME ZONE);
--將sysdate插入word_time表中的三列,查看區別
INSERT INTO word_time VALUES(SYSDATE,SYSDATE,SYSDATE);
--查詢表word_time,觀察三列顯示的區別
SELECT * FROM word_time;
/*
說明:
1、通過檢索表word_time,我們可以看見DBTIME列比較特殊,多出了 +08:00,這個表示我們事前已經設定的時區——東8區;
2、LOCAL_TIME與DBTIME的區別是,取的是資料庫伺服器所在作業系統的時區時間,與作業系統時區保持一致,
當作業系統時區改變時,需要重啟資料庫才會生效
**/
--TZ_OFFSET函數用於計算0時區與指定時區的小時、分鐘間隔
SELECT TZ_OFFSET('Asia/Chongqing') FROM DUAL;
--動態視圖查詢時區資訊
SELECT * FROM v$timezone_names stWHERE st.TZNAME LIKE'Asia%';
--查詢當前會話所在時區的時間,DATE類型,精度精確到秒
SELECT CURRENT_DATE FROM DUAL;
--顯示結果是TIMESTAMP類型,包含時區,精度預設保留6位,最多9位
SELECT CURRENT_TIMESTAMP FROM DUAL;
--顯示結果是TIMESTAMP類型,格式類似TIME STAMP WITH LOCAL TIME ZONE
SELECT LOCALTIMESTAMP FROM DUAL;
Oracle 單一實例 從32位 遷移到 64位 方法
在CentOS 6.4下安裝Oracle 11gR2(x64)
Oracle 11gR2 在VMWare虛擬機器中安裝步驟
Debian 下 安裝 Oracle 11g XE R2