Oracle drop表后恢复表和数据。Oracle数据类型VARCHAR2(4000)改为CLOB

plsql用得不太熟悉,今天先登陆的生产环境数据库,后来又登录的本地数据库。切换了几次,自己都有点糊涂了,但是看到plsql最上面的登录名是本地帐号。以为自己现在登录的是本地帐号。
然后需求让我改一个bug,把VARCHAR2(4000)改成类似于长文本的,可以储存大量文字。
百度了一下,要把VARCHAR2(4000)改为CLOB类型的需要删除表,因为在plsql里面我看见自己登录的是本地帐号,
我就以为是连的本地数据库,就把表给删了,然后创建了新表,把VARCHAR2(4000)改为CLOB类型。(最后才知道是把生产环境的数据库给删了!!!!!!!!!!!!!!!!大家删除表无论什么环境都要做好备份,养成一个好习惯)。过了半天我才反应过来,因为客户那边反应了好多问题,
数据全部变为undefined。我把plsql退出重新登录然后把客户环境和本地环境都查询了一下,发现刚才删的是客户环境!!!!!!
本地环境都是好的。当时就懵了。然后赶紧找运维恢复。运维试了下说删表了不能恢复。删了数据可以恢复;然后他用下面的三个sql执行了一下,发现无法恢复
select * from tablename as of timestamp to_timestamp(‘2020-10-20 00:00:00’, ‘yyyy-mm-dd hh24:mi:ss’)

alter table tablename enable row movement

flashback table tablename to timestamp TO_TIMESTAMP(‘2020-10-20 00:00:00’, ‘yyyy-mm-dd hh24:mi:ss’)
这两种方式都提示 ORA-01466: 无法读取数据 - 表定义已更改,因为把VARCHAR2(4000)改为CLOB类型。表结构变了,恢复不了。
我当时就方了。然后又问运维数据有没有备份,运维说没有!完了,等下肯定要挨骂,还要扣工资,说不定要被辞退啊!!!!心里慌得一匹。然后自己各种百度…
百度了好久都不行。
最后找到了这个,其实这个一开始试了好久,还是不行(不行的原因只是因为自己格式没有写正确…)
select * from recyclebin order by droptime;这个查询sql相当于删除表的回收站,可以查看被删的表。
根据recyclebin查询的结果,得到object_name,根据object_name可以闪回之前的表,任何时候drop的都可以!!!!前提是要能在recyclebin中可以查询得到你删除的表就可以闪回;
下面这段代码就是闪回之前指定的表,然后重新命名
注意!!!!!!!!!!!!!!!!!!!
这个表名必须得加上因为的双引号(""),不然会报 miss keyword这个错误,一开始我就没加双引号结果一直报错,后来加了双引号才好
flashback table “BIN$siZP1Nsj44fgU3NBAQrDNg==$0” to before drop rename to new_table_name;–闪回指定的表,并重新命名
再把表名更新为自己删除的表的表名就可以了
alter table new_table_name rename to want_table;–把表名更改为指定的表

要把Oracle的数据类型VARCHAR2(4000)改为CLOB类型;
1.先查询数据,导出做备份 --select * from tablename
2.创建临时表,临时表数据类型VARCHAR2(4000)改为CLOB,把数据给临时表,–insert into temptable select * from tablename;
3.删除tablename表,创建tablename表数据类型改为clob --drop tablename
4.把临时表数据给创建表 --insert into tablename select * from temptable;

–保存大文本数据
DECLARE
clobValue tablename.CLOB数据类型的属性名%TYPE;
BEGIN
clobValue := ‘大文本数据’;
UPDATE tablename T
SET T.CLOB数据类型的属性名 = clobValue
WHERE ids = ‘xxxxxxxx’
and name = ‘tttttt’
and dep = ‘yyyyyyyyyyyy’;
COMMIT;
END;

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值