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

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-22浏览:1

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 INDEX '||index_name||' rename to '||index_name||'_BAK;' from user_indexes where table_name='TABLE_NAME';
--ALTER INDEX SYS_C0011753 rename to SYS_C0011753_BAK;

5.重命名表,必须使用账套名登录,注意不能以sysdba,sysem登录
rename TABLE_NAME to TABLE_NAME_BAK;

6.创建与原来名称相同的空表,注意:这步脚本来自3步的结果
   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 DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  TABLESPACE "USERS"
7.把原来备份的表的数据还原新创建的表
insert into TABLE_NAME select * from TABLE_NAME_BAK;
commit;
8.确认数据已经插入进去
select count(*) from table_name;


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

1.用plsql工具把表的SQL创建语句导出来, 2.用sqlplus 账套名/passwd 登录/*drop table table_name;drop table table_name_bak;cre...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息