Oracle備份表

當表中的數據量很大時億量時,如果在繼續存放數據的話查詢的效率會很慢,這時可以對這個表做一個備份,然後創建一個一模一樣的表來繼續存放數據。

首先我們要做的是修改表的名字、主鍵的名字、索引的名字,如果有外鍵的話也對外鍵名修改。然後在創建一個新的表,表名、主鍵名、索引名、外鍵名。都和原來表中保持一致,然後在把一部分需要的數據導入到新的表中即可。

第一步修改表名

ALTER TABLE 表名 RENAME TO 修改後的表名;

第二步修改主鍵

由於主鍵名不能修改所以只能先刪除原來的主鍵,然後重新添加一個新的主鍵名稱,如下分情況操作。

1.當表有主鍵沒有主鍵約束名,先刪除主鍵,在添加主鍵。

刪除主鍵:ALTER TABLE 表名 DROP PRIMARY KEY;

添加主鍵:ALTER TABLE 表名 ADD PRIMARY KEY (字段名);

2.當有主鍵也有主鍵約束名,先刪除已有的主鍵約束名,在添加主鍵和主鍵約束名。

若不知道主鍵約束名可查詢:

SELECT C.CONSTRAINT_NAME FROM USER_CONS_COLUMNS C WHERE C.TABLE_NAME='表名';

查詢出來之後在刪除主鍵約束名:ALTER TABLE 表名 DROP CONSTRAINT 約束名;

最後在添加主鍵和主鍵約束名:ALTER TABLE 表名 CONSTRAINT 約束名 PRIMARY KEY (字段名1,字段名2);

第三步修改索引名

ALTER INDEX  索引名 RENAME TO 修改後的索引名;

第四步統計分析(作用是提高導入數據的效率)

ANALYZE TABLE 表名 COMPUTE STATISTICS FOR TABLE FOR ALL INDEXES FOR ALL COLUMNS;

注意:第二步和第四步所有操作的表名,都是修改之後的表名。

第五步創建新表(新表的表名要和第一步修改前的表名一致),同時從修改後的表中導入一部分所需數據

CREATE TABLE 表名 AS SELECT * FROM 修改後的表名 WHERE 自己需要導入的條件;

第六步添加主鍵

ALTER TABLE 表名 ADD CONSTRAINT 主鍵約束名 PRIMARY KEY(字段名);

第七步添加索引

CREATE INDEX 索引名 ON 表名 (字段名);

第八步爲了提高新表的查詢效率可以對新建的表做一個統計分析

ANALYZE TABLE 表名 COMPUTE STATISTICS FOR TABLE FOR ALL INDEXES FOR ALL COLUMNS;

例子如下:

表名:tb_student

主鍵是:student_id

主鍵約束名:pk_student_1

索引名:index_student_1

修改表名:alter table tb_student rename to tb_student_backup2019;

刪除主鍵:alter table tb_student_backup2019drop primary key;

或者刪除主鍵約束名:alter table tb_student_backup2019 drop constraint pk_student_1;

添加主鍵和主鍵約束名:

alter table tb_student_backup2019 add constraint pk_student_1_backup2019 primary key (student_id);

修改索引:alter index index_student_1 rename to index_student_1_backup2019;

統計分析:

analyze table tb_student_backup2019 compute statistics for table for all indexes for all columns;

創建新表:

create table tb_student as select * from tb_student_backup2019 where datetime>='20180101';

增加主鍵和主鍵約束名:alter table tb_student add constraint pk_student_1 primary key (student_id);

增加索引:create index index_student_1_backup2019 rename to index_student_1;

統計分析:analyze table tb_student compute statistics for table for all indexes for all columns;

還有一些常用命令也寫下方

查看oracle版本號:select * from v$version;

刪除索引:drop index 索引名;

統計分析另一種寫法:exec dbms_stats.gather_table_stats('用戶名','表名');  --該命令適用於dos窗口

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章