暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

Oracle 21C 新特性:数据泵相关新特性汇总

2176

Oracle 21C 于 12 月 8 日 发布云上版本,同时提供官方文档以及客户端下载。不过 Oracle Database 21c不是长期支持版本,而是创新版本,根据 MOS 说明 742060.1(今天 MOS 处于维护中无法登录),它将一直处于“高级支持”状态,直到 2023 年 6 月为止。距离现在只有 2.5 年,没有扩展支持。因此,潜在的 Oracle Database 21c 将成为测试和试用新的令人兴奋的功能,测试应用程序等的版本。但是生产环境现在应该转到 Oracle Database 19c,目前 19C 才是长期支持的稳定版本。

image.png

如下是官方文档链接:https://docs.oracle.com/en/database/oracle/oracle-database/21/index.html
image.png

由于今年的特殊环境,Oracle Database 20c 仅是预览版。不过据我所知,20c 中看到的功能全部在 21c 中。但是,Oracle 数据库 20c 将不再在云中可用,也已经移除了官方文档链接。

在墨天轮上盖老师总结了 21c 的十大新特性:

1. 原生的区块链支持 - Native Blockchain Tables
2. 持久化内存存储支持 - Persistent Memory Store
3. SQL 的宏支持 - SQL Macro
4. 原生的 JSON 数据类型支持
5. SQL 新特性和函数扩展 - Extensions
6. 自动化的 In-Memory 管理 - Self-Managing In-Memory
7. 广泛的机器学习算法和 AutoML支持
8. 多租户细粒度资源模型 - New Resource Modeling Scheme
9. 零影响的计划停机维护 - Zero Downtime for Planned Outages
10.In-Memory 的 Spatial 和 Text 支持

当然,这十大特性看着很不错,可在阿里大佬德哥的文章中却提出不值一提“为什么 Oracle 21c 的新特性不值得一提? 因为它已经老了!”那他老了吗?感兴趣的可自行查看。

相反,参数表达式化、家目录只读、备库的结果集缓存支持、缓存融合、GI SwitchHome 等等才更加实用,在盖老师总结的《Oracle Database 21c 十小新特性一览 - New Features 》中也有如下十个特性,可以一起看看:

  1. In-Memory 基础级支持
  2. Sharding 的增强
  3. 原生的 JavaScript 支持
  4. 备库的结果集缓存支持
  5. 强制只读的 Oracle Home
  6. 诊断控制的增强
  7. 表达式参数
  8. ANSI SQL 表达式的 EXCEPT 支持
  9. 关注日志 - Attention Log
  10. SQL*Net 诊断增强

Oracle Database 21C 更多新特性可查看官方文档,阅读详细信息: https://docs.oracle.com/en/database/oracle/oracle-database/21/nfcon/index.html

以下是 Database New Features 中关于数据泵相关的新特性,与大家分享学习。

1、数据泵支持文件校检

Oracle 数据泵导出的 dump 文件,从远端传到目标端时,要检查 Oracle Data Pump 转储文件的有效性,现在可以使用添加到转储文件中的校验和。在 21C 中,现在将一个 CHECKSUM 添加到转储文件中。您可以使用 CHECKSUM 来帮助确认在与对象存储区进行传输之后,以及在本地保存转储文件之后,该文件是有效的,并且它没有发生意外损坏或恶意更改。
以下是段官方文档原文:

Export the table HR.EMPLOYEES and add a checksum to the dump file to be able to confirm that the dump file is still valid after the export 
and that the data is intact and has not been corrupted. An Oracle Data Pump export writes control information into the header block of a dump file:
Oracle Database 21c extends the data integrity checks by adding an additional checksum for all the remaining blocks beyond the header within Oracle Data Pump 
and external table dump files. Use the CHECKSUM parameter during the export operation.

翻译如下:
导出表 HR.EMPLOYEES,并向转储文件添加一个校验和,以便能够确认转储文件在导出之后仍然有效,并且数据是完整的,没有被破坏。Oracle数据泵导出将控制信息写入转储文件的头块:Oracle Database 21c 扩展了数据完整性检查,为Oracle Data Pump和外部表转储文件头之外的所有剩余块添加了额外的校验和。在导出操作期间使用CHECKSUM参数。

expdp system/oracle21c@PDB21 TABLES=hr.employees DUMPFILE=dp_dir:emp.dmp CHECKSUM=yes REUSE_DUMPFILES=yes

注意:校验和算法默认为 SHA256 256位。
当然你也可以使用其他算法:如果您想使用 SHA384 384 位哈希算法或 SHA512 512 位哈希算法或 CRC32 32 位校验和,请使用 CHECKSUM_ALGORITHM 参数,而不是使用 SHA256 位哈希算法的校验和参数。即取消掉参数 CHECKSUM 即可。

$ expdp system/oracle21c@PDB21 TABLES=hr.employees DUMPFILE=dp_dir:emp384.dmp CHECKSUM_ALGORITHM=SHA384 CHECKSUM=no REUSE_DUMPFILES=yes

Copyright (c) 1982, 2020, Oracle and/or its affiliates.  All rights reserved.

ORA-39002: invalid operation
ORA-39050: parameter CHECKSUM=NO is incompatible with parameter CHECKSUM_ALGORITHM

$ expdp system/oracle21c@PDB21 TABLES=hr.employees DUMPFILE=dp_dir:emp512.dmp CHECKSUM_ALGORITHM=SHA512 REUSE_DUMPFILES=yes

Copyright (c) 1982, 2020, Oracle and/or its affiliates.  All rights reserved.

Starting "SYSTEM"."SYS_EXPORT_TABLE_01":  system/********@PDB21 TABLES=hr.employees dump 

在导入表之前,验证转储文件是否已损坏,并未实际执行导入命令。

使用参数 VERIFY_ONLY=YES 找出两个转储文件中的哪一个损坏了。

$ impdp system@PDB21 FULL=yes DUMPFILE=dp_dir:emp512.dmp VERIFY_ONLY=YES

Copyright (c) 1982, 2020, Oracle and/or its affiliates.  All rights reserved.

Verifying dump file checksums
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
dump file set is complete
verified checksum for dump file "/home/oracle/emp512.dmp"
dump file set is consistent
Job "SYSTEM"."SYS_IMPORT_FULL_01" successfully completed at Fri Feb 7 05:42:40 2020 elapsed 0 00:00:01

$ impdp system@PDB21 FULL=yes DUMPFILE=dp_dir:emp.dmp VERIFY_ONLY=YES

Copyright (c) 1982, 2020, Oracle and/or its affiliates.  All rights reserved.
Password: password

ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-39411: header checksum error in dump file "/home/oracle/emp.dmp"

$ oerr ora 39411
39411, 00000, "header checksum error in dump file \"%s\""
// *Cause:  The header block for the Data Pump dump file contained a
//          header checksum that did not match the value calculated from the
//          header block as read from disk. This indicates that the header
//          was tampered with or otherwise corrupted due to transmission or
//          media failure.
// *Action: Contact Oracle Support Services.
$

导入表
使用损坏的转储文件导入表。如果校验和是在导出转储文件完成时生成的,那么校验和将在导入期间进行验证。

$ impdp system/oracle21c@PDB21 FULL=yes DUMPFILE=dp_dir:emp.dmp
Copyright (c) 1982, 2020, Oracle and/or its affiliates.  All rights reserved.
ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-39411: header checksum error in dump file "/home/oracle/emp.dmp"

使用未损坏的转储文件导入表。如果校验和是在导出转储文件完成时生成的,那么如果您提到参数VERIFY_CHECKSUM,则在导入过程中验证校验和。Verifying dump file checksums

$ impdp system/oracle21c@PDB21 FULL=yes DUMPFILE=dp_dir:emp512.dmp VERIFY_CHECKSUM=YES

Copyright (c) 1982, 2020, Oracle and/or its affiliates.  All rights reserved.
Verifying dump file checksums
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_FULL_01":  system/********@PDB21 FULL=yes DUMPFILE=dp_dir:emp512.dmp VERIFY_CHECKSUM=YES
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "HR"."EMPLOYEES"                            17.08 KB     107 rows
…………

VERIFY_CHECKSUM=NO 时会出现警告:转储文件校验和验证被禁用。 Warning: dump file checksum verification is disabled.

$ impdp hr/hr@PDB21 FULL=yes DUMPFILE=dp_dir:emp512.dmp VERIFY_CHECKSUM=NO

Copyright (c) 1982, 2020, Oracle and/or its affiliates.  All rights reserved.
Master table "HR"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
Warning: dump file checksum verification is disabled
Master table "HR"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "HR"."SYS_IMPORT_FULL_01":  hr/********@PDB21 FULL=yes DUMPFILE=dp_dir:emp512.dmp VERIFY_CHECKSUM=NO
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "HR"."EMPLOYEES"                          17.08 KB     107 rows
…………

2、数据泵支持同时使用 INCLUDE 和 EXCLUDE

image.png
从 Oracle Database 21c 开始,Oracle Data Pump 允许您在同一个命令中设置 INCLUDE 和 EXCLUDE 参数。在命令中包含这两个参数时,Oracle 数据泵首先处理 include 参数,这样O racle 数据泵作业只包含标识为 INCLUDE 的对象。然后,它处理 EXCLUDE 参数,这可以进一步限制作业处理的对象。在该命令运行时,将删除包含对象列表中由 EXCLUDE 参数指定的任何对象。

例如:导出包含表 ‘JOBS’,‘DEPARTMENTS’ 的同时排除统计信息
$ expdp hr/hr@PDB21 DUMPFILE=hr.dmp DIRECTORY=dp_dir INCLUDE=TABLE:“IN (‘JOBS’,‘DEPARTMENTS’)” EXCLUDE=STATISTICS REUSE_DUMPFILES=YES

3、Oracle Data Pump 可以并行可传输的表空间元数据操作

在传输表空间导入导出时可以实现并行传输。
image.png

CREATE TABLESPACE users DATAFILE '/u01/app/oracle/oradata/CDB21/users01.dbf' SIZE 100M;
ALTER TABLESPACE users READ ONLY;

$ expdp \"sys@PDB21 AS SYSDBA\" dumpfile=PDB21.dmp TRANSPORT_TABLESPACES=users TRANSPORT_FULL_CHECK=YES LOGFILE=tts.log REUSE_DUMPFILES=YES PARALLEL=2

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
Password: oracle21c

Starting "SYS"."SYS_EXPORT_TRANSPORTABLE_02":  "sys/********@PDB21 AS SYSDBA" dumpfile=PDB21.dmp TRANSPORT_TABLESPACES=users TRANSPORT_FULL_CHECK=YES LOGFILE=tts.log REUSE_DUMPFILES=YES PARALLEL=2
ORA-39396: Warning: exporting encrypted data using transportable option without password

ORA-39396: Warning: exporting encrypted data using transportable option without password

Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded

ORA-39396 警告可以忽略,然后表空间恢复读写模式。
ALTER TABLESPACE users READ WRITE;

4、Oracle Data Pump 提供可选的索引压缩

如果没有指定,那么索引压缩子句被省略(并且索引被赋予表空间的默认压缩)。但是,如果您使用压缩,那么Oracle 建议您使用 COMPRESS ADVANCED LOW。使用指定的压缩创建索引。
如果索引压缩子句不止一个单词,那么它必须包含在单引号或双引号中。此外,您的操作系统可能要求您将子句括在转义字符中,例如反斜杠字符。例如:

TRANSFORM=INDEX_COMPRESSION_CLAUSE:“COMPRESS ADVANCED LOW”

以下是一个简单案例,可参考:

SQL> SELECT compression, compress_for FROM DBA_TABLES WHERE table_name='EMPLOYEES';
COMPRESS COMPRESS_FOR
-------- ------------------------------
DISABLED
SQL> COL INDEX_NAME FORMAT A30
SQL> SELECT index_name, compression FROM dba_indexes WHERE table_name='EMPLOYEES';

INDEX_NAME                     COMPRESSION
------------------------------ -------------
EMP_NAME_IX                    DISABLED
EMP_EMAIL_UK                   DISABLED
EMP_EMP_ID_PK                  DISABLED
EMP_DEPARTMENT_IX              DISABLED
EMP_JOB_IX                     DISABLED
EMP_MANAGER_IX                 DISABLED

6 rows selected.

--创建导出目录
SQL> CREATE OR REPLACE DIRECTORY dp_dir AS '/home/oracle/test';

SQL> GRANT read, write ON DIRECTORY dp_dir TO hr;
-- 导出表
$ expdp hr@PDB21 DUMPFILE=PDB21.dmp DIRECTORY=dp_dir TABLES=EMPLOYEES REUSE_DUMPFILES=YES
--导入表,同环境下测试可先删除然后导入
SQL> DROP TABLE hr.employees CASCADE CONSTRAINTS;

$ impdp hr@PDB21 FULL=Y DUMPFILE=PDB21.dmp DIRECTORY=dp_dir TRANSFORM=TABLE_COMPRESSION_CLAUSE:\"COMPRESS BASIC\" TRANSFORM=INDEX_COMPRESSION_CLAUSE:\"COMPRESS ADVANCED LOW\" EXCLUDE=CONSTRAINT

--查看压缩方式
SQL> SELECT compression, compress_for FROM DBA_TABLES WHERE table_name='EMPLOYEES';

COMPRESS COMPRESS_FOR
-------- ------------------------------
ENABLED  BASIC

SQL> COL INDEX_NAME FORMAT A30
SQL> SELECT index_name, compression FROM dba_indexes WHERE table_name='EMPLOYEES';

INDEX_NAME                     COMPRESSION
------------------------------ -------------
EMP_DEPARTMENT_IX              ADVANCED LOW
EMP_JOB_IX                     ADVANCED LOW
EMP_MANAGER_IX                 ADVANCED LOW
EMP_NAME_IX                    ADVANCED LOW

5、另外,还有 Oracle Data Pump 支持从云对象存储导出和导入、Oracle Data Pump 恢复可传输表空间作业、Oracle Data Pump 支持原生 JSON 数据类型。

Oracle Data Pump 有能力恢复可运输表空间的导出和导入工作。由于错误或其他问题,您会发现可传输表空间导出或导入作业停止。Oracle Data Pump 恢复这些停止的作业的能力有助于节省您的时间,并使系统更加可用。

最后,21C 到底有哪些值得一提的新特性,每个人都看到的不尽相同。不可否认, Oracle 是非常强大的数据库,必须心存敬畏,但是时代在变化,我们要拥抱变化,不断学习,心存感激,心存敬畏。

参考链接:
https://www.modb.pro/db/41888
https://www.modb.pro/db/41902
https://github.com/digoal/blog/blob/master/202012/20201210_02.md
https://docs.oracle.com/en/database/oracle/oracle-database/21/nfcon/index.html

————————————————————————————
公众号:JiekeXu之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————

最后修改时间:2020-12-12 17:19:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论