1.可恢复的空间分配 1.1 了解可恢复的空间分配
一般情况,我们发出一个大型数据库操作,比如创建大表索引,如果表空间不足,数据库最终会终止操作。
而可恢复的空间分配功能可以使得这类操作挂起,等待DBA去处理,等成功处理之后大型数据库操作自动恢复,这样就避免了这类棘手问题,节省了时间。
相关参数和用法:
--参数resumable_timeout show parameter resumable_timeout --实例级别启用resumable alter system set resumable_timeout = 7200; --实例级别禁用resumable alter system set resumable_timeout = 0; --赋权resumable权限给某个用户 grant resumable to jingyu; --会话级别修改 --启用resumable alter session enable resumable; --设定挂起时长 alter session enable resumable timeout 144000; --设定名称 alter session enable resumable name 'Create Big Index'; --禁用resumable alter session disable resumable; --查询DBA_RESUMABLE了解挂起语句的详细信息 set linesize 140 col name for a40 col error_msg for a30 select USER_ID, SESSION_ID, INSTANCE_ID, STATUS, NAME, ERROR_MSG from dba_resumable;实验-配置使用当前会话的可恢复的空间分配:
--如果表空间不足,创建表会直接失败 SQL> show user USER is "JINGYU" SQL> create table t_s1 as select * from dba_objects; create table t_s1 as select * from dba_objects * ERROR at line 1: ORA-01652: unable to extend temp segment by 128 in tablespace DBS_D_JINGYU --如果启用session的resumable,再创建表就会挂起操作 SQL> alter session enable resumable timeout 7200; Session altered. SQL> create table t_s1 as select * from dba_objects; ...这里长时间挂起 --此时我们从告警日志中可以看到对应的日志信息,操作被挂起: Wed Jan 13 09:51:55 2016 statement in resumable session 'User JINGYU(99), Session 62, Instance 1' was suspended due to ORA-01652: unable to extend temp segment by 128 in tablespace DBS_D_JINGYU --扩展表空间 SQL> alter tablespace DBS_D_JINGYU add datafile size 30M; Tablespace altered. --此时告警日志信息可以看到操作继续执行: Wed Jan 13 10:01:12 2016 statement in resumable session 'User JINGYU(99), Session 62, Instance 1' was resumed Completed: alter tablespace DBS_D_JINGYU add datafile size 30M autoextend on --再去看刚刚挂起的建表语句已经执行成功 SQL> create table t_s1 as select * from dba_objects; Table created. --禁用当前会话的resumable alter session disable resumable; 1.3 使用可恢复的空间分配功能 --触发器基本结构如下,需要根据具体需求来完善 create or replace trigger resumable_notify after suspend on database declare -- variables, if required begin -- check DBA_RESUMABLE for user ID, type of -- object, then send e-mail dbms_resumable.space_error_info(. . .); if object_type = 'TABLE' and object_owner = 'HR' then -- give DBA 2 hours to resolve dbms_resumable.set_timeout(7200); utl_mail.send('DBA@company.com',. . .); else dbms_resumable.abort(. . .); end if; end; 2.可移动表空间使用Data Pump导出表空间中对象的元数据,将组成表空间的数据文件复制到目的数据库,然后把表空间的元数据导入到目的数据库中。
2.1 配置可移动表空间在平台间传输数据,源平台和目的平台必须是Oracle支持的平台列表中的成员。
2.1.1 确定兼容性需求