Oacle12c支持可插入数据库(PDB)在一个统一的数据库(CDB)中具有不同的字符集、时区文件版本和数据库时区。
出于性能原因,Oracle建议将数据库时区设置为UTC(0:00),因为不需要转换时区。
多租户体系结构允许您为每个可插入数据库指定一个不同的数据库时区,并使用容器数据库的时区作为默认值。
在容器数据库级别设置时区与为非cdb实例设置时区相同。CDB设置是所有可插入数据库的默认值。
1. 检查容器数据库的当前时间
sqlplus / as sysdba
SQL> select dbtimezone from dual;
2. 查看PDB时区
SQL> alter session set container=orclpdb;
SQL> SELECT dbtimezone FROM DUAL;
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;
附(标红为国内常用时区):
- UTC-12(IDL - 国际换日线)
- UTC-11 (MIT - 中途岛标准时间)
- UTC-10(HST - 夏威夷-阿留申标准时间)
- UTC-9:30(MSIT - 马克萨斯群岛标准时间)
- UTC-9(AKST - 阿拉斯加标准时间)
- UTC-8(PST - 太平洋标准时间A)
- UTC-7(MST - 北美山区标准时间)
- UTC-6(CST - 北美中部标准时间)
- UTC-5(EST - 北美东部标准时间)
- UTC-4(AST - 大西洋标准时间)
- UTC-3:30(NST - 纽芬兰岛标准时间)
- UTC-3(SAT - 南美标准时间)
- UTC-2(BRT - 巴西时间)
- UTC-1(CVT - 佛得角标准时间)
- UTC(WET - 欧洲西部时区,GMT - 格林威治标准时间)
- UTC+1(CET - 欧洲中部时区)
- UTC+2(EET - 欧洲东部时区)
- UTC+3(MSK - 莫斯科时区)
- UTC+3:30(IRT - 伊朗标准时间)
- UTC+4(META - 中东时区A)
- UTC+4:30(AFT- 阿富汗标准时间)
- UTC+5(METB - 中东时区B)
- UTC+5:30(IDT - 印度标准时间)
- UTC+5:45(NPT - 尼泊尔标准时间)
- UTC+6(BHT - 孟加拉标准时间)
- UTC+6:30(MRT - 缅甸标准时间)
- UTC+7(IST - 中南半岛标准时间)
- UTC+8(EAT - 东亚标准时间/中国标准时间(BJT))
- UTC+9(FET- 远东标准时间)
- UTC+9:30(ACST - 澳大利亚中部标准时间)
- UTC+10(AEST - 澳大利亚东部标准时间)
- UTC+10:30(FAST - 澳大利亚远东标准时间)
- UTC+11(VTT - 瓦努阿图标准时间)
- UTC+11:30(NFT - 诺福克岛标准时间)
- UTC+12(PSTB - 太平洋标准时间B)
- UTC+12:45(CIT - 查塔姆群岛标准时间)
- UTC+13(PSTC - 太平洋标准时间C)
- UTC+14(PSTD - 太平洋标准时间D)