oracle中假如碰到表损坏,而没有rman备份可以恢复,或者碰到不明原因的bug,需要重建表测试,如何重建表?

1.用plsql工具把表的SQL创建语句导出来,
2.用sqlplus 账套名/passwd 登录
/*
drop table table_name;
drop table table_name_bak;
create table table_name(a int primary key,b int );
insert into table_name values(1,1);
commit;
*/
--假定table_name是我们要重建的表,
3. 获取表的创建语句,这步也可以用sqldeveloper, pl/sql developer, TOAD等工具,通过图形界面取得
SET SERVEROUTPUT ON
SET LINESIZE 1000
SET FEEDBACK OFF
set long 999999
SET PAGESIZE 1000
--上面 set 这五句在sqldeveloper, pl/sql developer, TOAD等工具中则不必执行
DECLARE
BEGIN
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);
END;
/
--除去多余的参数
SELECT DBMS_METADATA.GET_DDL('TABLE','TABLE_NAME') FROM DUAL;
--取表创建语句
得到类似以下语句,把语句复制出来,将会在第6步用到
-- CREATE TABLE "LUO"."TABLE_NAME"
-- ( "A" NUMBER(*,0),
-- "B" NUMBER(*,0),
-- PRIMARY KEY ("A")
-- USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
-- TABLESPACE "USERS" ENABLE
-- ) SEGMENT CREATION IMMEDIATE
-- PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
-- NOCOMPRESS LOGGING
-- TABLESPACE "USERS"
4.执行下面语句,得到重命名索引的执行语句,使索引用回原来的名字,把结果复制出来
select 'ALTER
oracle中假如碰到表损坏,而没有rman备份可以恢复,或者碰到不明原因的bug,需要重建表测试,如何重建表?
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



