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;
附(标红为国内经常使用时区):