LK最近遇到比较棘手的公网数据库数据错乱问题,记录一下处理过程,希望大家以后遇到会有所帮助,有所启发。
所用数据库:oracle
发现数据错乱时间:周五早上
最早客户反应数据错误时间:周三晚上八点
数据库备份时间每小时一次
实施思路
- 首先停止服务器
- 本地导入周三晚上八点数据
- 随机导入前几天一个备份,查看数据是否完整
- 折半查找到有问题数据和无问题数据相隔一小时
- 以数据完整的备份,还原数据
增量数据还原过程
1. 增量数据主要指最先发现有问题数据到本周五晚上
2. 用每条记录的创建日期为依据查找增量数据建立新表
创建新的增量表
create table 旧表名 as(
SELECT *
FROM 新表名
WHERE createtime >=
to_date('2018-10-24 14:00:00', 'yyyy-mm-dd hh24:mi:ss')
and createtime < to_date('2018-10-26 19:00:00', 'yyyy-mm-dd hh24:mi:ss')
)
3. 导出对应dmp文件,导入数据库服务器
4. 导入数据完整的备份,然后导入dmp文件,合并新表
增量表数据插入对应原始表中
insert into 旧表名(
SELECT *
FROM 新表名
)
****5.特别注意这样做oracle序列不会自动增加,需要手动调整索引
LK第一次做的时候就没有注意
1.查找id是否重复
select * from 表名 a where (a.id) in (select id from 表名 group by id having count(*) > 1)
2.id降序排列
select id from 表名 order by id desc
3.修改sqe序列
start with 值加一
调整完索引,删除新建的表,导入服务器。
6.你需要修改数据库密码
alter user 用户名 identified by 新密码
7.修改完密码有可能会遇到此用户被锁定问题
ORA-28000: the account is locked plsql(账户被锁住)
用户名sys 连接为sysdba登录
找到user文件夹将对应用户,用户被锁住前面的 √去掉
在重新登录
*******用户一直被锁(执行如下命令)
alter profile default limit FAILED_LOGIN_ATTEMPTS UNLIMITED;
用户远程连接在一定时间内发现较多次数连接失败就会锁住用户
这时候需要对用户解锁,并设置FAILED_LOGIN_ATTEMPTS 参数无限制
8.常用导入导出命令
- 导入表
imp 用户名/密码@orcl file=文件路劲.dmp tables=表名1,表名2…
2.导入数据库文件
imp 用户名/密码@服务器ip/ORCL file=文件路劲.dmp full=y ignore=y;
3.导出用exp