http://www.jcwcn.com/article/database/oracle/

今天上班犯了一个严重的错误:把我们系统所使用的Oracle数据库中的数据给改掉了!当发现自己改错时,顿时冒了一身冷汗。不过转念一想,我们不是定期作了数据库备份的嘛,适当的恢复一下,应该不会出现太大的问题吧,因为我只是错误的使用了一个update语句。

问题是这样的:

我们给系统创建了两个用户:com和comtest。前者存放的是正式库数据,后者存放的测试库数据。它们都有一个taw_rm_user表,存放了使用该系统的用户基本信息,我就是把其中的password字段全部改成了123456。

DMP备份文件是9月28号创建的,经过十一七天长假后到今天,已经有十几天了,我简单的查了一下日志,发现已经创建了几个新的用户,并且有些旧的用户的其他信息也已经更改了。直接把备份文件中的taw_rm_user表导入com用户下是肯定不行的。经过一段时间的冷静思考后,得到了一个解决方案。

大致思路是:

1. 将测试库的taw_rm_user表用CREATE TABLE AS语句导到一个临时的备份表中(测试库中的用户表也不能乱改);

2. 再将taw_rm_user表删除;

3. 然后将DMP备份文件的taw_rm_user表用IMP命令导入到comtest下;

4. 再自己编写一个PL/SQL程序块,通过使用游标循环,将这个新导入的表中的password字段更新到com.taw_rm_user表的对应记录中。注意,这里只更新对应记录,对新加入的用户记录不作任何修改;

5. 再将之前备份的taw_rm_user表恢复到comtest下即可。

其中使用的两段关键语句如下:

-- 备份测试库中的taw_rm_user表

create table comtest.taw_rm_user_bak

as

select * from comtest.taw_rm_user

-- 恢复正式库中的taw_rm_user.password字段

declare

rec_comtest comtest.taw_rm_user%rowtype;

cursor cur_comtest is

select * from comtest.taw_rm_user;

begin

open cur_comtest;

loop

fetch cur_comtest into rec_comtest;

exit when cur_comtest%notfound;

update com.taw_rm_user

set com.taw_rm_user.password=rec_comtest.password

where com.taw_rm_user.user_id=rec_comtest.user_id;

end loop;

close cur_comtest;

commit;

end;

这样就可以在不更改其他所有信息的情况下,将所有旧用户的密码恢复到从前。

---恢复内容结束---

Oracle数据库中的数据出错的解决办法的更多相关文章

  1. 向Oracle数据库中插入数据出错:ORA-01036 无效的变量名或数据

    向Oracle数据库中插入数据出错: 经过排查,因为Update数据时没有出错,所以OracleHelper没有问题: 看异常信息提示:无效的变量和数据,应该是SQL语句的问题,调试时所传的实例Use ...

  2. 将Oracle数据库中的数据写入Excel

    将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...

  3. ArcCatalog中通过ArcSDE向Oracle数据库中导入数据

    将数据导入到Oracle指定的表空间的具体内容如下: 首先,在ArcCatalog中建立指定表空间的数据库连接(要以指定表空间的用户登录): 然后,在ArcCatlog中定位到数据源,选中并拷贝图层; ...

  4. 详解大数据采集引擎之Sqoop&采集oracle数据库中的数据

    一.Sqoop的简介: Sqoop是一个数据采集引擎/数据交换引擎,采集关系型数据库(RDBMS)中的数据,主要用于在RDBMS与HDFS/Hive/HBase之间进行数据传递,可以通过sqoop i ...

  5. 解决getJdbcTemplate往oracle数据库中插入数据返回主键出错问题

    我们使用Spring中的JdbcDaoSupport往Mysql中插入数据并返回主键代码,我们使用的mysql数据库,主键在数据库中设置为自增长:该类继承自JdbcDaoSupport,所以能直接使用 ...

  6. 关于数据库新建用户提示“用户、组或角色‘’XXX‘’在当前数据库中已已存在”的解决办法

    一般在还原数据库后,给这个数据库添加一个登录名时出现. 例如数据库备份文件中已经包含了用户abc,现在还原了数据库,然后发现现有数据库中没有abc这个用户,想要新建一个abc用户,作为该数据库的own ...

  7. Mybatis在oracle数据库中插入数据后返回自增值ID

    1.将id设置成自增序列 CREATE OR REPLACE TRIGGER "DATALIB"."TRIG_USER_ADD" BEFORE INSERT O ...

  8. oracle 数据库io 异常,错误代码17002 解决办法

    数据库使用一个月了,突然挂掉:错误代码17002 io异常:read timeout 解决: 1.登陆sql命令窗口 [oracle@hostname ~]$ sqlplus /nolog SQL*P ...

  9. Django——models中导入数据重复的解决办法

    如果你导入数据过多,导入时出错了,或者你手动停止了,导入了一部分,还有一部分没有导入.或者你再次运行上面的命令,你会发现数据重复了,怎么办呢? django.db.models 中还有一个函数叫 ge ...

随机推荐

  1. linux 安装软件各种错误集锦及解决方法

    1.最小化安装了centos, 但是使用ifconfig命令时候出现”bash ifconfig command not found” .解决方法:yum -y install net-tools.x ...

  2. 备用DNS域名服务器

    DNS:1.34.151.129,域名:www#eliuliang#com, 个人用解析地址,请勿使用.

  3. ubuntu 16.04在真实机安装后的静态ip的配置

    nssa-sensor1@nssa-sensor1:~$ vim /etc/network/interfaces 以下是编辑文件的内容# interfaces(5) file used by ifup ...

  4. FastDFS+Nginx+fastdfs-nginx-module集群搭建

    一.实验环境说明 操作系统: Centos 6.6 x64 FastDFS 相关版本: fastdfs-5.05 fastdfs-nginx-module-v1.16 libfastcommon-v1 ...

  5. Solr中的日期/时间表示

    摘要: Solr的日期字段(TrieDateField 和DateRangeField)可以对一个时间点以毫秒精度表示. 格式 Solr中的日期有很严格的格式限制: YYYY-MM-DDThh:mm: ...

  6. asp.net 中日期的格式化显示的方法

    在Asp.net 中经常使用日期,在不同的场合,对日期的显示方式有不同的要求,为此,自己总结了一些日期格式化的方式,仅供学习参考使用: C#格式化日期时间 DateTime dt = DateTime ...

  7. MySQL----ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

    1.问题描述 在导入同事提供的一个sql文件时候,出现了一个1071错误,总结学习一下: 2.分析问题 错误的字面意思是说mysql字段设置的值太长了,不能大于767个字节,在网上找了一些资料后才知道 ...

  8. Java Swing类 例子代码:将子类继承JFrame 并且接口按键监听ActionLisetener (将内容直接添加到JFrame不创建Contaniner)

    package rom; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import ...

  9. Linux网络管理-相关笔记【自用】

    ISO/OSI七层模型应用层            APDU 应用层协议数据单元   越靠近用户表示层            PPDU 表示层协议数据单元会话层            SPDU 会话协 ...

  10. 【每日一学】pandas_透视表函数&交叉表函数

    每日一悟 [分开工作内外8小时] 前一个月,我经常把工作内的问题带到路上.地铁上.睡觉前,甚至是周末. 然而很快发现,我工作外的成就几乎没有,而工作内的进展也并不理想. 仔细想想,工作外是需要学新东西 ...