一、估计资源使用量dbms_space.create_table_cost的使用
SQL> set serveroutput on
SQL>
SQL> declare
2
used_bytes number;
3
alloc_bytes number;
4
begin
5
dbms_space.create_table_cost(
6
tablespace_name=>'USERS',
7
avg_row_size=>30,
8
row_count=>30000,
9
pct_free=>20,
10 used_bytes=>used_bytes,
11 alloc_bytes=>alloc_bytes
12 );
13 dbms_output.put_line('used:'||used_bytes);
14 dbms_output.put_line('allocated:'||alloc_bytes);
15 end;
16 /
used:1261568
allocated:2097152
PL/SQL 过程已成功完成。
二、分析增长趋势dbms_space.object_growth_trend的使用
参考:
Oracle® Database PL/SQL Packages and Types Reference
中
dbms_space部分
三、管理优化统计信息
SQL> column table_name format a15;
SQL> column tablespace_name format a10;
SQL> select table_name, tablespace_name,num_rows, last_analyzed from user_tables
;
已选择8行。
收集一下表IOT、COUNTRIES的统计信息
SQL> exec dbms_stats.gather_table_stats('HR','IOT')
PL/SQL 过程已成功完成。
SQL> exec dbms_stats.gather_table_stats('HR','COUNTRIES')
PL/SQL 过程已成功完成。
SQL> select table_name, tablespace_name,num_rows, last_analyzed from dba_tables
where wner='HR';
四、联机重组方案对象
使hr.departments表重组后成为分区表
SQL> desc departments;
名称 是否为空? 类型
----------------------------------------- --------------- -------------
DEPARTMENT_ID NOT NULL NUMBER(4)
DEPARTMENT_NAME NOT NULL VARCHAR2(30)
MANAGER_ID NUMBER(6)
LOCATION_ID NUMBER(4)
1)创建临时表
1 create table dept_tmp(
2 department_id number(4),
3 department_name varchar2(30),
4 manager_id number(6),
5 location_id number(4))
6 partition by range (department_id)
7 (partition dept_tmp1 values less than (100),
8 partition dept_tmp2 values less than (200),
9 partition dept_tmp3 values less than (maxvalue)
10* )
SQL> /
2)检查重组表是否可以进行重组
SQL> exec dbms_redefinition.can_redef_table('HR','DEPT_TMP');
BEGIN dbms_redefinition.can_redef_table('HR','DEPT_TMP'); END;
*
第 1 行出现错误:
ORA-12089: 不能联机重新定义无主键的表 "HR"."DEPT_TMP"
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 137
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 1479
ORA-06512: 在 line 1
添加主键
SQL> alter table dept_tmp add constraints dept_tmp_pk primary key(department_id)
;
表已更改。
再次检查
SQL> exec dbms_redefinition.can_redef_table('HR','DEPT_TMP');
PL/SQL 过程已成功完成。
3)启动在线从定义过程
SQL> exec dbms_redefinition.start_redef_table('HR','DEPARTMENTS','DEPT_TMP');
PL/SQL 过程已成功完成。
此时插入一条数据到departments
SQL> insert into departments values(999,'shanghai','',1700);
已创建 1 行。
查看departments表
SQL> select * from departments;
查看dept_tmp表
4)如果要把业务信息全部同步到dept_tmp
SQL> exec dbms_redefinition.sync_interim_table('HR','DEPARTMENTS','DEPT_TMP');
PL/SQL 过程已成功完成。
再次查看dept_tmp表
SQL> select * from dept_tmp;
这时新插入数据已经同步过来
然后再插入数据
SQL> insert into departments values(998,'beijing','',1700);
已创建 1 行。
此时departments与dept_tmp又不同步
查看当前的分区表视图
SQL> select table_name from user_part_tables
2 ;
TABLE_NAME
------------------------------
DEPT_TMP
5)完成重组过程
SQL> exec dbms_redefinition.finish_redef_table('HR','DEPARTMENTS','DEPT_TMP')
PL/SQL 过程已成功完成。
查看分区表视图
SQL> select table_name from user_part_tables;
TABLE_NAME
------------------------------
DEPARTMENTS
查看departments表
SQL> select * from departments;
查看dept_tmp表
都还有插入信息
6)删除临时表
SQL>drop table dept_tmp purge;
总结重组过程:
1. 验证表是否是联机重组的候选对象。
2. 创建一个临时表。
3. 启动重新定义过程。
4. 复制相关对象。(该操作将对临时表自动创建所有
触发器、索引、授权和约束条件。)
5. 查询DBA_REDEFINITION_ERRORS 视图,检查是否
有错误。
6. 同步临时表(可选)。
7. 完成重新定义。
8. 删除临时表。
手动联机重组的基本步骤
使用的命令和过程有:
1. DBMS_REDEFINITION.CAN_REDEF_TABLE
2. CREATE TABLE …
3. DBMS_REDEFINITION.START_REDEF_TABLE
4. DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS 和
DBMS_REDEFINITION.CONS_ORIG_PARAMS
5. SELECT object_name, base_table_name, ddl_txt
FROM DBA_REDEFINITION_ERRORS;
6. DBMS_REDEFINITION.SYNC_INTERIM_TABLE
7. DBMS_REDEFINITION.FINISH_REDEF_TABLE
8. DROP TABLE … PURGE
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24104518/viewspace-712475/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24104518/viewspace-712475/
本文深入探讨了数据库资源管理、增长趋势分析、优化统计信息收集、联机重组方案及其实现过程,包括创建临时表、验证重组可行性、启动重组过程、同步数据以及最终完成重组并删除临时表的方法。







1.jpg

被折叠的 条评论
为什么被折叠?



