"景先生毕设|www.jxszl.com

Oracle 12c 新特性

2023-09-12 15:40编辑: www.jxszl.com景先生毕设

不同于以往的版本,在Oracle数据库12c R1版本中对数据文件的迁移或重命名不再需要太多繁琐的步骤,即把表空
间置为只读模式,接下来是对数据文件进行离线操作。在12c R1中,可以使用ALTER DATABASE MOVE DATAFILE这
样的SQL语句对数据文件进行在线重命名和移动。而当此数据文件正在传输时,终端用户可以执行查询,DML以及DDL
方面的任务。另外,数据文件可以在存储设备间迁移,如从非ASM迁移至ASM,反之亦然。

在数据文件已存在于新路径的情况下,以相同的命名将其覆盖:
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会在其中记录具体的行为。

重要提示:
  1、UPDATE INDEXES语句可以避免出现表中任何本地或全局索引无法使用的情况。
  2、表的在线迁移限制也适用于此。
  3、引入加锁机制来完成这一过程,当然它也会导致性能下降并会产生大量的redo,这取决于分区和子分区的大小。

  在Oracle 11g R1中,Oracle以不可见索引和虚拟字段的形式引入了一些不错的增强特性。继承前者并发扬光大,Oracle 12c R1中

息或应用某些安全条件。
  在12c R1中,你可以在表中创建不可见字段。当一个字段定义为不可见时,这一字段就不会出现在通用查询中,除非在SQL语句或

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之前,一个字段是无法以任何形式拥有多个索引的。或许有人会想知道为什么通常一个字段需要有多重索引,事实上

包含在Bitmap索引中。注意,只有一种类型的索引是在给定时间可用的。

---ORA-01408: 此列列表已索引 ,正在分析原因。

谁在什么时间执行了create或drop命令是十分有用的。要开启这一功能必须对ENABLE_DDL_LOGGING 初始参数加以配置。这一参数可以

$ORACLE_BASE/diag/rdbms/DBNAME/log|ddl 路径下的xml和日志文件中。一个xml中包含DDL命令,IP地址,时间戳等信息。这可以帮助

开启DDL日志功能
SQL> ALTER SYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE; ----SYSTEM 级别的修改无需重启数据库即可生效。

示例:

DDL LOG 日志:

6. 临时undo
  
每个Oracle数据库包含一组与 查询临时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"

   在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 121 m;

  Oracle数据库备份主要分为两类:逻辑和物理备份。每种备份类型都有其自身的优缺点。在之前的版本中,利用现
有物理备份来恢复表或分区是不可行的。为了恢复特定对象,逻辑备份是必需的。对于12c R1,你可以在发生drop或
truncate的情况下从RMAN备份将一个特定的表或分区恢复到某个时间点或SCN。
当通过RMAN发起一个表或分区恢复时,大概流程是这样的:
1、确定要恢复表或分区所需的备份集
2、在恢复表或分区的过程中,一个辅助数据库会临时设置为某个时间点
3、利用数据泵将所需表或分区导出到一个dumpfile
4、你可以从源数据库导入表或分区(可选)
5、在恢复过程中进行重命名操作
  
以下是一个通过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.
(此选项可以对表重命名)
重要提示:
1、确保对于辅助数据库在/u01文件系统下有足够的可用空间,同时对数据泵文件也有同样保证
2、必须要存在一份完整的数据库备份,或者至少是要有SYSTEM相关的表空间备份

以下是在RMAN中应用表或分区恢复的限制和约束:
1、SYS用户表或分区无法恢复
2、存储于SYSAUX和SYSTEM表空间下的表和分区无法恢复
3、当REMAP选项用来恢复的表包含NOT NULL约束时,恢复此表是不可行的

11. 对表分区维护的增强

创建测试表:
SQL> CREATE TABLE emp_part
(eno number(8), ename varchar2(40), sal number (6))
PARTITION BY RANGE (sal)
(PARTITION p1 VALUES LESS THAN (10000),
PARTITION p2 VALUES LESS THAN (20000),
PARTITION p3 VALUES LESS THAN (30000)
);
 

ALTER TABLE table_name{DROP|TRUNCATE} PARTITIONS 命令来撤销或合并多个分区和子分区。

要保持索引更新,使用UPDATE INDEXES或UPDATE GLOBAL INDEXES语句,如下所示:
SQL> ALTER TABLE emp_part DROP PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;
SQL> ALTER TABLE emp_part TRUNCATE PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;
如果你在不使用UPDATE GLOBAL INDEXES 语句的情况下删除或截断一个分区,你可以在USER_INDEXES或
USER_IND_PARTITIONS 字典视图下查询ORPHANED_ENTRIES 字段以找出是否有索引包含任何的过期条目。
将单个分区分割为多个新分区
  在12c中新增强的SPLIT PARTITION 语句可以让你只使用一个单独命令将一个特定分区或子分区分割为多个新分
区。下例说明了如何将一个分区分割为多个新分区:
 

你可以使用单条ALTER TBALE MERGE PARTITIONS 语句将多个分区合并为一个单独分区:
SQL>

SQL> ALTER TABLE emp_part MERGE PARTITIONS p3,p4,p5 INTO PARTITION p_merge;
如果分区范围形成序列,你可以使用如下示例:
SQL> ALTER TABLE emp_part MERGE PARTITIONS p3 TO p5 INTO PARTITION p_merge;

  每当一个新的Oracle版本发布,DBA所要面临的挑战就是升级过程。该部分我将介绍12c中引入的针对升级的两个改
进。
  预升级脚本
  在12c R1中,原有的utlu[121]s.sql 脚本由一个大为改善的预升级信息脚本preupgrd.sql所取代。除了预升级检查验
证,此脚本还能以修复脚本的形式解决在升级过程前后出现的各种问题。
  可以对产生的修复脚本加以执行来解决不同级别的问题,例如,预升级和升级后的问题。当手动升级数据库时,脚
本必须在实际升级过程初始化之前加以手动执行。然而,当使用DBUA工具来进行数据库升级时,它会将预升级脚本作为
升级过程的一部分加以自动执行,而且会提示你去执行修复脚本以防止报错。
  如何执行脚本:
SQL> @$ORACLE_12GHOME/rdbms/admin/preupgrd.sql
  以上脚本会产生一份日志文件以及一个[pre/post]upgrade_fixup.sql 脚本。所有这些文件都位于
$ORACLE_BASE/cfgtoollogs 目录下。在你继续真正的升级过程之前,你应该浏览日志文件中所提到的建议并执行脚本以修复问题。
  注意:

并行升级功能

组件数量,而不是数据库的大小。在之前的版本中,我们是无法并行运行升级程序,从而快速完成整个升级过程的。
  在12c R1中,原有的catupgrd.sql 脚本由catctl.pl 脚本(并行升级功能)替代,现在我们可以采用并行模式运行升级程序了。
  以下流程说明了如何初始化并行升级功能(3个过程);你需要在升级模式下在启动数据库后运行这一脚本:
cd $ORACLE_12_HOME/perl/bin
$ ./perl catctl.pl –n 3 -catupgrd.sql
  以上两个步骤需要在手动升级数据库时运行。而DBUA也继承了这两个新变化。

14. 对Data Pump的增强
  Data Pump版本有了不少有用的改进,例如在导出时将视图转换为表,以及在导入时关闭日志记录等。
  关闭redo日志的生成  Data Pump中引入了新的TRANSFORM选项,这对于对象在导入期间提供了关闭重做生成的灵活性。当为
TRANSFORM选项指定了DISABLE_ARCHIVE_LOGGING 值,那么在整个导入期间,重做生成就会处于关闭状态。这一
功能在导入大型表时缓解了压力,并且减少了过度的redo产生,从而加快了导入。这一属性还可应用到表以及索引。以
下示例演示了这一功能:
$ ./impdp directory=dpump dumpfile=abcd.dmp logfile=abcd.log TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
  将视图转换为表
  这是Data Pump中另外一个改进。有了VIEWS_AS_TABLES 选项,你就可以将视图数据载入表中。以下示例演示了
如何在导出过程中将视图数据载入到表中:
$ ./expdp directory=dpump dumpfile=abcd.dmp logfile=abcd.log views_as_tables=my_view:my_table

  通过使用诸如AWR、ASH以及ADDM之类的自动诊断工具来分析数据库的健康状况,是每个DBA日程工作的一部
分。尽管每种工具都可以在多个层面衡量数据库的整体健康状况和性能,但没有哪个工具可以在数据库反应迟钝或是完
全挂起的时候使用。
  当数据库反应迟钝或是挂起状态时,而且你已经配置了Oracle 企业管理器 12c的云控制,你就可以对严重的性能问
题进行诊断。这对于你了解当前数据库发生了什么状况有很大帮助,而且还能够对此问题给出解决方案。
  以下步骤演示了如何在Oracle 企业管理器 12c上分析数据库状态:
  1、在访问数据库访问主页面从Performance菜单选择Emergency Monitoring 选项。这会显示挂起分析表中排名靠前
的阻止会话。
  2、在Performance菜单选择Real-Time ADDM 选项来执行实时ADDM分析。
  3、在收集了性能数据后,点击Findings标签以获得所有结果的交互总结。

<p style="\&quot;border-width:" 0px;="" padding:="" margin:="" 0px="" 8px;="" list-style:="" none;="" text-indent:="" 2em;="" color:="" rgb(51,="" 51,="" 51);="" font-family:="" simsun;="" font-size:="" 14px;="" font-style:="" normal;="" font-variant-ligatures:="" font-variant-caps:="" font-weight:="" letter-spacing:="" orphans:="" 2;="" text-align:="" start;="" text-transform:="" white-space:="" widows:="" word-spacing:="" -webkit-text-stroke-width:="" background-color:="" rgb(249,="" 249,="" 249);\"=""> 16. 同时在多个表上收集统计数据
  在之前的Oracle数据库版本中,当你执行一个DBMS_STATS 程序来收集表、索引、模式或者数据库级别的统计数
据时,Oracle习惯于一次一个表的收集统计数据。如果表很大,那么推荐你采用并行方式。在12c R1中,你现在可以同
时在多个表、分区以及子分区上收集统计数据。在你开始使用它之前,你必须对数据库进行以下设置以开启此功能:
SQL> ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='DEFAULT_MAIN';
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=4;
SQL> EXEC DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT', 'ALL');
SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');
原文链接:http://www.jxszl.com/biancheng/shujuku/445431.html