方案管理任务
一、估計資源使用量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表 SQL> select * from 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表 SQL> select * from 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
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表 SQL> select * from 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表 SQL> select * from 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
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/24104518/viewspace-712475/,如需轉載,請注明出處,否則將追究法律責任。
轉載于:http://blog.itpub.net/24104518/viewspace-712475/
總結
- 上一篇: python 知识点视频,Python超
- 下一篇: python提取excel一列或多列数据