您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

关于Oracle数据库12c 新特性总结

时间:2020-06-23 09:31:02  来源:  作者:

 

1、不可见字段(Invisible columns)

在 12c R1中,可以在表中创建不可见字段。当一个字段为不可见时,这一字段就不会出现在查询结果中,除非显式在 SQL 语句或条件中指定,或是在表定义中有 DESCRIBED。

实例:

创建一张表TEST,将其中一列设置为invisible,字段查询观察结果。

1.1、建表

create table emp (id number,name varchar2(20) invisible);
insert into emp(id,name) values(1,'tom');
insert into emp(id,name) values(2,'mike');
commit;

1.2、字段查询

select * from emp;
select id,name from emp;
关于Oracle数据库12c 新特性总结

 

1.3、PLSQL查看

关于Oracle数据库12c 新特性总结

 


2、相同字段上的多重索引(Multiple indexes on the same set of columns)

在12c中可使用invisible参数,对表同一字段创建不同类型的索引

实例:

2.1、建表及索引

create table dup(name varchar2(10),sex varchar2(10),adr varchar2(200),id number(10),birth date);
create index idx_dup_adr on dup(adr);
create bitmap index bitidx_dup_adr on dup(adr) invisible;
SELECT OWNER,INDEX_NAME,INDEX_TYPE,TABLE_NAME,STATUS,VISIBILITY FROM DBA_INDEXES WHERE TABLE_NAME='DUP';
关于Oracle数据库12c 新特性总结

 


关于Oracle数据库12c 新特性总结

 

2.2、如果要使bitmap索引生效,将btree索引设为隐藏

alter index idx_dup_adr invisible;
alter index bitidx_dup_adr visible;
关于Oracle数据库12c 新特性总结

 


3、DDL日志

DDL log开启之后可在记录的xml文件中找到对应的时间戳以及主机ip。

以下的 DDL 语句可能会记录在 xml 或日志文件中:

  • CREATE|ALTER|DROP|TRUNCATE TABLE
  • DROP USER
  • CREATE|ALTER|DROP PACKAGE|FUNCTION|VIEW|SYNONYM|SEQUENCE

3.1、开启 DDL 日志功能

 ALTER SYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE;

3.2、删除表dup

 drop table dup;
关于Oracle数据库12c 新特性总结

 

3.3、查看日志

 $cat  /u01/App/oracle/diag/rdbms/srm/SRM/log/ddl/log.xml 
关于Oracle数据库12c 新特性总结

 


4、新的备份用户特权

在11g R2中,引入了SYSASM特权来执行ASM的特定操作。同样地,在12c中引入了SYSBACKUP特权用来在 RMAN中执行备份和恢复命令。因此,你可以在数据库中创建一个本地用户并在不授予其SYSDBA权限的情况下,通过授予SYSBACKUP权限让其能够在RMAN中执行备份和恢复相关的任务。

grant sysbackup to admin
rman
connect target "admin/oracle@pdb as sysbackup"

5、 数据泵的增强

5.1、关闭redo日志的生成

在导入大型表时可以通过增加TRANSFORM选项,关闭redo日志的生成,从而加快导入。

impdp admin/oracle@pdb directory=dump dumpfile=admin.dmp logfile=admin_nolog.log 
schemas=admin TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y

5.2、导出将视图转换为表

expdp admin/oracle@pdb directory=dump dumpfile=admin.dmp logfile=admin.log 
views_as_tables=view_test

6、完整可传输导出/导入 迁移数据库(Full transportable export/import)

Oracle 数据库 12c 的完整可传输导出/导入(Full Transportable Export/Import)功能来使用较少的停机时间,将数据库升级/迁移到 Oracle 数据库 12c (12.1.0.2以上)中。(支持单实例迁移到RAC集群)

可以使用full transportable export/import功能将整个数据库从一个数据库实例复制到另一个数据库实例。可以使用Data Pump来生成一个导出dump文件,如果需要将这个dump文件传输到目标数据库,然后导入dump文件。另外也可以使用Data Pump跨网络来复制数据库。

数据库中要被传输的表空间可以是字典管理或本地管理表空间。源数据库中的表空间的块大小不必与目标数据库中标准块大小相同。

这种传输数据库的方法要求直到完成导出dump文件之前所要传输的用户创建的表空间必须设置为只读状态。如果不能满足这个条件那么可以使用备份功能来完成传输表空间。

这个后面单独演示一下。。。

使用导出dump文件方式来传输数据库必须执行以下步骤:
1)在源数据库上,将每个用户表空间设置为只读状态。在执行导出操作时要确保设置参数transportable=always与full=y。如果源数据库的版本是11.2.0.3或11G之后的版本,那么还必须设置version=12或更高版本号。导出的dump文件包含了存储在用户表空间中对象的元数据与存储在管理表空间(比如system与sysaux)中用户创建对象的元数据与实际数据。

2)将导出的dump文件传输到目标数据库

3)将所有用户表空间的所有数据文件传输到目标数据库,如果源平台与目标平台不同,那么需要检查字节编码,可以通过查询v$transportable_platform视图进行查看。如果源平台与目标平台的字节编码不一样,那么使用以下方法来转换数据文件:
(1)使用dbms_file_transfer包中的get_file或put_file过程来传输数据文件。这些过程会将源数据文件自动转换为目标平台的字节编码方式。
(2)使用rman的convert命令将源数据文件转换为目标平台的字节编码方式

4)可选操作,将源数据库中的将被传输的表空间设置为读写状态

5)在目标数据库中导入数据,当导入完成后,用户表空间将会设置为读写状态。


7、扩展数据类型长度32k Strings

VARCHAR2, NAVARCHAR2 以及 RAW 这些数据类型的 大小可以从 4K 以及 2K 字节扩展至32K 字节。

开启方法:

7.1、关闭cdb

 alter pluggable database SRMPDB close;

7.2、启动数据库到upgrade模式

 startup upgrade;

7.3、在cdb内修改初始化参数MAX_STRING_SIZE

ALTER SESSION SET CONTAINER=CDB$ROOT;
ALTER SYSTEM SET max_string_size=extended SCOPE=SPFILE;

7.4、以sys用户执行扩展脚本

 @?/rdbms/admin/utl32k.sql

7.5、重启数据库到normal模式

shutdown immediate;
startup;

7.6、执行脚本编译无效对象

 @?/rdbms/admin/utlrp.sql

8、在SQL语句中通过with语句定义函数(12.1.0.2)

ORACLE 12C可以在sql语句中编写函数,在read only或者不想新建函数,可通过这种方法实现。

如下创建一个函数,用来判断输入数据是否是数字,如果是数字输出Y,如果不是输出N.

with function Is_Number
      (x in varchar2) return varchar2 is
        Plsql_Num_Error exception;
         pragma exception_init(Plsql_Num_Error, -06502);
     begin
       if (To_Number(x) is NOT null) then
         return 'Y';
       else
         return '';
      end if;
    exception
     when Plsql_Num_Error then
       return 'N';
    end Is_Number;

用select语句调用Is_Number函数

select is_number('1') from dual; 
/

9、在线移动并重命名数据文件

当数据文件正在传输时,终端用户可以执行查询,DML 以及 DDL 方面的任务

--移动数据文件并且重命名(容器数据只能移动自己所属数据文件)
alter database move datafile '/u01/app/oracle/oradata/orcl/pdborcl/admin.dbf' to '/home/oracle/admin1.dbf';

--文件系统移动到ASM磁盘(如果rac环境中数据文件创建在某个节点,移动数据文件之后,需要在另外节点重启cdb)
alter database move datafile '/home/oracle/admin.dbf' to '+DATA/pdborcl_admin.dbf';

10、高级索引压缩(COMPRESS ADVANCED LOW)

在使用高级索引压缩之后,可以一定程度下降低数据库IO。

场景实验;a表普通索引,b表压缩索引,简单看看段大小

10.1、a表创建普通索引

create table a(id int,object_name varchar2(20));
insert into a values(1,'hwb');
create index idx_obname_a on a(object_name);
select segment_name,bytes/1024/1024 from dba_segments where segment_name =upper('idx_obname_a');
关于Oracle数据库12c 新特性总结

 

10.2、b表创建压缩索引

create table b(id int,object_name varchar2(20));
insert into b values(1,'hwb');
create index idx_obname_b on b(object_name) COMPRESS ADVANCED LOW;
select segment_name,bytes/1024/1024 from dba_segments where segment_name =upper('idx_obname_b');

我这里数据量太少了,一个段的空间都没占满,所以看到的都是一样。

关于Oracle数据库12c 新特性总结

 


11、PGA大小限制(PGA Size Limit)

在12C之前,对于PGA内存的管理是使用PGA_AGGREGATE_TARGET参数来控制的,但这个参数只是一个目标值,可以超过设定的大小,无法直接对pga限定大小。

在12C中可使用PGA_AGGREGATE_LIMIT参数来限制Oracle实例PGA使用内存的上限,如果超过限制就采取终止会话的方式来降低PGA内存的使用量。

备注:如果使用ASMM,PGA_AGGREGATE_LIMIT大小为2G(初始化参数未超过2G)或者PGA_AGGREGATE_TARGET的2倍(超过2G)


12、RMAN 表级恢复

在Oracle 12C之前RMAN只能在数据库级(数据文件)、表空间级进行完全恢复或者不完全恢复。如果是某张表发生了截断或者删除,可通过闪回表或者闪回数据库快速恢复,或者是dmp文件。然而到了12C,RMAN可以通过备份将数据表恢复到故障时间点,而其他表不受影响。其过程是在恢复过程中创建辅助实例,还原系统数据文件(system、sysaux、undotbs),基于redo或者archivelog应用,最后通过数据泵导入目标shemas,恢复之后自动创建的辅助实例会被自动删除。


13、In-Memory选件

启用IMO非常简单,12.1.0.2及之后版本下,设置INMEMORY_SIZE 为非0值便可启用IM column store特性。

INMEMORY_SIZE 是个实例级参数,默认为0,设置一个非0值时,最小值为100M。

通常情况下,sys用户下的对象及SYSTEM、SYSAUX表空间上的对象无法使用IMO特性,但通过设置“_enable_imc_sys”隐含参数也可以使用

开启DB In-Memory过程如下:

1)修改INMEMORY_SIZE参数:

SQL> ALTER SYSTEM SET INMEMORY_SIZE=1G SCOPE=SPFILE;

2)检查sga参数的设置,确保在设置完inmemroy_size参数之后数据库实例还可以正常启动。如果数据库使用了ASMM,则需要检查sga_target参数。如果使用了AMM,则需要检查MEMORY_TARGET参数,同时也需要检查SGA_MAX_TARGET(或MEMORY_MAX_TARGET)。

备注:从 12.2 开始,可以动态增加 In-Memory 区域的大小,为此,只需 通过 ALTER SYSTEM 命令增加 INMEMORY_SIZE 参数值即可

3)重启数据库实例

4)查看IM特性是否开启

 SHOW PARAMETER inmemory;

14、全库缓存(Force Full Database Caching Mode)

通常情况下,Oracle会决定哪些数据会留在缓冲区中。当没足够的空间时,数据会被写出内存。此外,为了避免大量读取将有用的信息挤出缓冲区,Oracle对有些操作也许会采取绕过缓冲区的措施。Oracle12cR1 (12.1.0.2)引入了全数据缓冲的概念。如果Oracle认为缓冲区大的足以容纳整个数据库,那么,它将会缓冲所有的数据块。此外,可以强制启用全数据缓冲模式。

要想强制开启该模式,需要先将关闭并将库置于mount状态,否则,在打开的数据库上执行该ALTER DATABASE命令将会报错。

开启强制全库缓存模式数据库兼容性级别必须是12.0.0或者更高;

14.1、查看是否启用全数据库缓存

SELECT FORCE_FULL_DB_CACHING FROM V$DATABASE;

关于Oracle数据库12c 新特性总结

 

14.2、启用全数据库缓存

startup mount;
ALTER DATABASE FORCE FULL DATABASE CACHING;
ALTER DATABASE OPEN;

15、Sharding Database

Oracle Sharding是Oracle 12.2版本推出的新功能,也称为数据分片,适用于online transaction processing (OLTP). Oracle Sharding基于表分区技术,是一种在数据层将数据水平分区存储到不同的数据库的技术. Sharding可以实现将一个分区表的不同分区存储在不同的数据库中,每个数据库位于不同的服务器,每一个数据库都称为shard, 这些shard组成一个逻辑数据库,称为sharded database (SDB). 这个table也称为sharded table, 每个shard数据库中保存该表的不同数据集(按照sharding key分区), 但是他们有相同的列(columns)。

Shard是一种shared-nothing技术,每个shard数据库使用独立的服务器硬件(CPU,内存等)。Shard可以运行在单机数据库或者DATAGUARD/ADG数据库。


16、在线把非分区表转为分区表(12.2.0.1)

在Oracle12.2版本之前,如果想把一个非分区表转为分区表常用的有这几种方法:

1)建好分区表然后insert into select 把数据插入到分区表中;

2)使用在线重定义(DBMS_REDEFINITION)的方法。

Oracle12cR2版本中提供了一种新特性,一条语句就可以把非分区表转换为分区表,例如:

alter table tablename modify
partition by range (字段) interval (10)
( 
partition p1 values less than (10),
partition p2 values less than (20)
) online
;

17、表在线移动

在11g以及12C R1,如果通过alter table move降低高水位,表的索引在move之后会失效。在12C R2中可通过独有关键字online子句以及update indexes在线移动表,并且索引不会失效。

 alter table tablename move online;

18、DataGuard通过网络恢复数据文件

在Oracle 12C中可以通过rman指定网络服务名方式,在主备库之间恢复数据库文件,有如下几种方式:

  • 数据库级别: restore database from service <服务别名>恢复数据文件、控制文件、参数文件。
  • 表空间: restore tablespace from service <服务别名>
  • 控制文件: restore controlfile to ‘指定的位置’ from service <服务别名>
  • SPFILE: restore spfile from service <服务别名>

19、In-Database Archiving数据库内归档

通常,在应用程序开发中对表做设计时,不可避免的会对表中的数据做删除处理,如果直接使用硬删除,则不能有效地对已删除的数据进行追踪;如果采用软删除(例如表中增加了删除标记的字段delete_flag),虽然可以对已删除的字段进行追踪,但如果使用未删除的数据时,需要加上delete_flag='N',这种带删除标记的数据对应用来说是可见的,而且占用一定的存储空间。

Oracle Database 12c中引入了 In-Database Archiving的新特性, 该特性允许用户通过对表上的数据行标记为inactive不活跃的,以归档数据。 这些inactive的数据行可以通过压缩进一步优化,且对应用来说默认不可见。该特性可以对现有代码做最少改动的情况下,实现了这种“标记删除”的功能和需求。

 

 

了解更多


Tags:Oracle数据库   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
安装环境Linux服务器:Centos 6 64位Oracle服务器:Oracle11gR2 64位 系统要求说明:内存必须高于1G的物理内存;交换空间,一般为内存的2倍(1G的内存可以设置swap 分区为3G大小);硬...【详细内容】
2021-12-27  Tags: Oracle数据库  点击:(2)  评论:(0)  加入收藏
Oracle数据库的安装和使用 1、数据库安装 1.1下载 1.2 安装 2、配置数据库 2.1 创建表空间 2.2 创建用户 2.3 配置监听 2.4 配置本地服务名(Tnsnames) 网络配置与访...【详细内容】
2021-02-08  Tags: Oracle数据库  点击:(175)  评论:(0)  加入收藏
1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual; A A ZERO SPACE --------- --------- ---------...【详细内容】
2020-11-06  Tags: Oracle数据库  点击:(172)  评论:(0)  加入收藏
本期将更新Oracle数据库的安装的和PLSQL连接入数据库的完整教程,篇幅可能比较长,主要是照顾基础较差的小伙伴,下面让我们一起看一下教程:安装前提醒:1. 首先我们需要弄清楚自己安...【详细内容】
2020-08-25  Tags: Oracle数据库  点击:(146)  评论:(0)  加入收藏
一、概述本文将给大家介绍如何限制某个ip或某个ip段才能访问Oracle数据库 通过sqlnet.ora 通过/etc/hosts.deny和/etc/hosts.allow 通过iptables二、正式实验本次实验环境是...【详细内容】
2020-08-25  Tags: Oracle数据库  点击:(106)  评论:(0)  加入收藏
生产环境经常会遇到磁盘空间不够的情况,接下来为大家介绍lvm卷扩展的办法解决。 实验环境:系统:Centos7装机采用lvm卷方式分区,将oracle数据库部署在了/home/oracle分区,后期发现...【详细内容】
2020-07-31  Tags: Oracle数据库  点击:(122)  评论:(0)  加入收藏
众所周知,数据库升级、转换、迁移是数据库运维必备的日常技能,本文详细介绍一则将DB2数据库转换成Oracle数据库的案例,希望对大家有帮助。1.前言记录一则使用sql developer工具...【详细内容】
2020-07-31  Tags: Oracle数据库  点击:(138)  评论:(0)  加入收藏
1、不可见字段(Invisible columns)在 12c R1中,可以在表中创建不可见字段。当一个字段为不可见时,这一字段就不会出现在查询结果中,除非显式在 SQL 语句或条件中指定,或是在表定...【详细内容】
2020-06-23  Tags: Oracle数据库  点击:(254)  评论:(0)  加入收藏
服务器数据恢复故障北京某公司的一台服务器,上层数据类型为Oracle数据库,由于服务器意外断电,导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。由于客户...【详细内容】
2020-05-29  Tags: Oracle数据库  点击:(90)  评论:(0)  加入收藏
最近打算整理一下资料,写几篇关于数据库安全的文章。特此记录,方便查阅。 操作流程 帐号权限加固 1、限制应用用户在数据库中的权限,尽量保证最小化避免授予了 DBA 权限1.查看...【详细内容】
2020-03-14  Tags: Oracle数据库  点击:(156)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条