Oacle12c支持可插入數據庫(PDB)在一個統一的數據庫(CDB)中具備不一樣的字符集、時區文件版本和數據庫時區。
sql
出於性能緣由,Oracle建議將數據庫時區設置爲UTC(0:00),由於不須要轉換時區。
數據庫
多租戶體系結構容許您爲每一個可插入數據庫指定一個不一樣的數據庫時區,並使用容器數據庫的時區做爲默認值。
session
在容器數據庫級別設置時區與爲非cdb實例設置時區相同。CDB設置是全部可插入數據庫的默認值。
oop
1. 檢查容器數據庫的當前時間性能
sqlplus / as sysdbafetch
SQL> select dbtimezone from dual;spa
2. 查看PDB時區code
SQL> alter session set container=orclpdb;blog
SQL> SELECT dbtimezone FROM DUAL;ip
3. 修改PDB時區,根據實際須要設置時區
SQL> ALTER DATABASE SET TIME_ZONE='+00:00';
報錯處理:
ORA-30079: cannot alter database timezone when database has TIMESTAMP WITH
LOCAL TIME ZONE columns
1) 清除帶時區格式的時間字段表
--sql begin----
--刪除用戶指定表----
declare v_sql varchar(255);
cursor cur_tb is select 'drop table '|| owner || '.' || table_name || ' purge ' sqltext from dba_tables
where table_name = 'T_BOS_DBTIMEZONEINFO'
AND OWNER <> 'SYS' AND OWNER <> 'SYSTEM';
begin
--打開遊標cur_tb--
open cur_tb;
fetch cur_tb into v_sql;
loop
--判斷遊標cur_stu所指是否有數據行--
if cur_tb%found then
--將遊標cur_stu當前行取出存放到變量中--
begin
execute immediate v_sql;
exception
when others then
dbms_output.put_line('刪除用戶表異常:'||sqlerrm);
end;
fetch cur_tb into v_sql;
else
exit;
end if;
end loop;
--關閉遊標cur_tb--
close cur_tb;
end;
--sql end----
2) 修改PDB時區
alter database set time_zone='+00:00';
4. 修改好後須要重啓pdb
SQL> alter pluggable database orclpdb close;
SQL> alter pluggable database orclpdb close immediate;
SQL> alter pluggable database orclpdb open;
SQL> select dbtimezone from dual;
附(標紅爲國內經常使用時區):