共计 5054 个字符,预计需要花费 13 分钟才能阅读完成。
这篇文章将为大家详细讲解有关 Oracle 数据库 12c 新特性有哪些,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1. 在线重命名和重新定位活跃数据文件
不同于以往的版本,在 Oracle 数据库 12c R1 版本中对数据文件的迁移或重命名不再需要太多繁琐的步骤,即把表空间置为只读模式,接下来是对数据文件进行离线操作。在 12c R1 中,可以使用 ALTER DATABASE MOVE DATAFILE 这样的 SQL 语句对数据文件进行在线重命名和移动。而当此数据文件正在传输时,终端用户可以执行查询,DML 以及 DDL 方面的任务。另外,数据文件可以在存储设备间迁移,如从非 ASM 迁移至 ASM,反之亦然。
重命名数据文件:
SQL ALTER DATABASE MOVE DATAFILE /u00/data/users01.dbf TO /u00/data/users_01.dbf
从非 ASM 迁移数据文件至 ASM:
SQL ALTER DATABASE MOVE DATAFILE /u00/data/users_01.dbf TO +DG_DATA
将数据文件从一个 ASM 磁盘群组迁移至另一个 ASM 磁盘群组:
SQL ALTER DATABASE MOVE DATAFILE +DG_DATA/DBNAME/DATAFILE/users_01.dbf TO +DG_DATA_02
在数据文件已存在于新路径的情况下,以相同的命名将其覆盖:
SQL ALTER DATABASE MOVE DATAFILE /u00/data/users_01.dbf TO /u00/data_new/users_01.dbf REUSE;
复制文件到一个新路径,同时在原路径下保留其拷贝:
SQL ALTER DATABASE MOVE DATAFILE /u00/data/users_01.dbf TO /u00/data_new/users_01.dbf KEEP;
当通过查询 v$session_longops 动态视图来移动文件时,你可以监控这一过程。另外,你也可以引用 alert.log,Oracle 会在其中记录具体的行为。
2. 表分区或子分区的在线迁移
在 Oracle 12c R1 中迁移表分区或子分区到不同的表空间不再需要复杂的过程。与之前版本中未分区表进行在线迁移类似,表分区或子分区可以在线或是离线迁移至一个不同的表空间。当指定了 ONLINE 语句,所有的 DML 操作可以在没有任何中断的情况下,在参与这一过程的分区或子分区上执行。与此相反,分区或子分区迁移如果是在离线情况下进行的,DML 操作是不被允许的。
示例:
SQL ALTER TABLE table_name MOVE PARTITION|SUBPARTITION partition_name TO tablespace tablespace_name;
SQL ALTER TABLE table_name MOVE PARTITION|SUBPARTITION partition_name TO tablespace tablespace_name UPDATE INDEXES ONLINE;
第一个示例是用来在离线状况下将一个表分区或子分区迁移至一个新的表空间。第二个示例是在线迁移表分区或子分区并维护表上任何本地或全局的索引。此外,当使用 ONLINE 语句时,DML 操作是不会中断的。
重要提示:
UPDATE INDEXES 语句可以避免出现表中任何本地或全局索引无法使用的情况。
表的在线迁移限制也适用于此。
引入加锁机制来完成这一过程,当然它也会导致性能下降并会产生大量的 redo,这取决于分区和子分区的大小。
3. 不可见字段
在 Oracle 11g R1 中,Oracle 以不可见索引和虚拟字段的形式引入了一些不错的增强特性。继承前者并发扬光大,Oracle 12c R1 中引入了不可见字段思想。在之前的版本中,为了隐藏重要的数据字段以避免在通用查询中显示,我们往往会创建一个视图来隐藏所需信息或应用某些安全条件。
在 12c R1 中,你可以在表中创建不可见字段。当一个字段定义为不可见时,这一字段就不会出现在通用查询中,除非在 SQL 语句或条件中有显式的提及这一字段,或是在表定义中有 DESCRIBED。要添加或是修改一个不可见字段是非常容易的,反之亦然。
SQL CREATE TABLE emp (eno number(6), ename name varchar2(40), sal number(9) INVISIBLE);
SQL ALTER TABLE emp MODIFY (sal visible);
你必须在 INSERT 语句中显式提及不可见字段名以将不可见字段插入到数据库中。虚拟字段和分区字段同样也可以定义为不可见类型。但临时表,外部表和集群表并不支持不可见字段。
4. 相同字段上的多重索引
在 Oracle 12c R1 之前,一个字段是无法以任何形式拥有多个索引的。或许有人会想知道为什么通常一个字段需要有多重索引,事实上需要多重索引的字段或字段集合是很多的。在 12c R1 中,只要索引类型的形式不同,一个字段就可以包含在一个 B -tree 索引中,同样也可以包含在 Bitmap 索引中。注意,只有一种类型的索引是在给定时间可用的。
5. DDL 日志
在之前的版本中没有可选方法来对 DDL 操作进行日志记录。而在 12c R1 中,你现在可以将 DDL 操作写入 xml 和日志文件中。这对于了解谁在什么时间执行了 create 或 drop 命令是十分有用的。要开启这一功能必须对 ENABLE_DDL_LOGGING 初始参数加以配置。这一参数可以在数据库或会话级加以设置。当此参数为启用状态,所有的 DDL 命令会记录在 $ORACLE_BASE/diag/rdbms/DBNAME/log|ddl 路径下的 xml 和日志文件中。一个 xml 中包含 DDL 命令,IP 地址,时间戳等信息。这可以帮助确定在什么时候对用户或表进行了删除亦或是一条 DDL 语句在何时触发。
开启 DDL 日志功能
SQL ALTER SYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE;
以下的 DDL 语句可能会记录在 xml 或日志文件中:
CREATE|ALTER|DROP|TRUNCATE TABLE
DROP USER
CREATE|ALTER|DROP PACKAGE|FUNCTION|VIEW|SYNONYM|SEQUENCE
6. 临时 undo
每个 Oracle 数据库包含一组与系统相关的表空间,例如 SYSTEM,SYSAUX,UNDO TEMP,并且它们在 Oracle 数据库中每个都用于不同的目的。在 Oracle 12c R1 之前,临时表生成的 undo 记录是存储在 undo 表空间里的,通用表和持久表的 undo 记录也是类似的。而在 12c R12 的临时 undo 功能中,临时 undo 记录可以存储在一个临时表中,而无需再存储在 undo 表空间内。这样做的主要好处在于:减少 undo 表空间,由于信息不会被记录在 redo 日志中,所以减少了 redo 数据的生成。你可以在会话级别或者数据库级别来启用临时 undo 选项。
启用临时 undo 功能
要使用这一新功能,需要做以下设置:
兼容性参数必须设置为 12.0.0 或更高
启用 TEMP_UNDO_ENABLED 初始化参数
由于临时 undo 记录现在是存储在一个临时表空间中的,你需要有足够的空间来创建这一临时表空间
对于会话级,你可以使用:ALTER SYSTEM SET TEMP_UNDO_ENABLE=TRUE;
查询临时 undo 信息
以下所列的字典视图是用来查看或查询临时 undo 数据相关统计信息的:
V$TEMPUNDOSTAT
DBA_HIST_UNDOSTAT
V$UNDOSTAT
要禁用此功能,你只需做以下设置:
SQL ALTER SYSTEM|SESSION SET TEMP_UNDO_ENABLED=FALSE;
7. 备份特定用户特权
在 11g R2 中,引入了 SYSASM 特权来执行 ASM 的特定操作。同样地,在 12c 中引入了 SYSBACKUP 特权用来在 RMAN 中执行备份和恢复命令。因此,你可以在数据库中创建一个本地用户并在不授予其 SYSDBA 权限的情况下,通过授予 SYSBACKUP 权限让其能够在 RMAN 中执行备份和恢复相关的任务。
$ ./rman target username/password as SYSBACKUP
8. 如何在 RMAN 中执行 SQL 语句
在 12c 中,你可以在不需要 SQL 前缀的情况下在 RMAN 中执行任何 SQL 和 PL/SQL 命令,即你可以从 RMAN 直接执行任何 SQL 和 PL/SQL 命令。如下便是在 RMAN 中执行 SQL 语句的示例:
RMAN SELECT username,machine FROM v$session;
RMAN ALTER TABLESPACE users ADD DATAFILE SIZE 121m;
9. RMAN 中的表恢复和分区恢复
Oracle 数据库备份主要分为两类:逻辑和物理备份。每种备份类型都有其自身的优缺点。在之前的版本中,利用现有物理备份来恢复表或分区是不可行的。为了恢复特定对象,逻辑备份是必需的。对于 12c R1,你可以在发生 drop 或 truncate 的情况下从 RMAN 备份将一个特定的表或分区恢复到某个时间点或 SCN。
当通过 RMAN 发起一个表或分区恢复时,大概流程是这样的:
确定要恢复表或分区所需的备份集
在恢复表或分区的过程中,一个辅助数据库会临时设置为某个时间点
利用数据泵将所需表或分区导出到一个 dumpfile
你可以从源数据库导入表或分区 (可选)
在恢复过程中进行重命名操作
以下是一个通过 RMAN 对表进行时间点恢复的示例 (确保你已经对稍早的数据库进行了完整备份):
RMAN connect target username/password as SYSBACKUP
RMAN RECOVER TABLE username.tablename UNTIL TIME TIMESTAMP…
AUXILIARY DESTINATION /u01/tablerecovery
DATAPUMP DESTINATION /u01/dpump
DUMP FILE tablename.dmp
NOTABLEIMPORT — this option avoids importing the table automatically.(此选项避免自动导入表)
REMAP TABLE username.tablename : username.new_table_name — can rename table with this option.(此选项可以对表重命名)
重要提示:
确保对于辅助数据库在 /u01 文件系统下有足够的可用空间,同时对数据泵文件也有同样保证
必须要存在一份完整的数据库备份,或者至少是要有 SYSTEM 相关的表空间备份
以下是在 RMAN 中应用表或分区恢复的限制和约束:
SYS 用户表或分区无法恢复
存储于 SYSAUX 和 SYSTEM 表空间下的表和分区无法恢复
当 REMAP 选项用来恢复的表包含 NOT NULL 约束时,恢复此表是不可行的
10. 限制 PGA 的大小
在 Oracle 12c R1 之前,没有选项可以用来限制和控制 PGA 的大小。虽然你设置某个大小为 PGA_AGGREGATE_TARGET 的初始参数,Oracle 会根据工作负载和需求来动态地增大或减小 PGA 的大小。而在 12c 中,你可以通过开启自动 PGA 管理来对 PGA 设定硬性限制,这需要对 PGA_AGGREGATE_LIMIT 参数进行设置。因此,你现在可以通过设置新的参数来对 PGA 设定硬性限制以避免过度使用 PGA。
SQL ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=2G;
SQL ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=0; –disables the hard limit
重要提示:
当超过了当前 PGA 的限制,Oracle 会自动终止 / 中止会话或进程以保持最合适的 PGA 内存。
关于“Oracle 数据库 12c 新特性有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。