django oracle clob,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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值