‘壹’ Oracle数据被删除后,如何恢复
删除表后,可以采用如下操作:
在 user_recyclebin中找到最近操作过的表名称,然后用闪回(只能用于10G及以上版本)。
FLASH BACK TABLE TABLE_NAME TO BEFORE DROP;
如果是删了或修改里面的数据,可以先建立一个快表将删除修改之前状态的数据找回到这个表中:
CREATE TABLE QUICK_TABLE AS
SELECT * FROM TABLE_NAME AS OF TIMESTAMP SYSDATE-1/24 (一小时前的),减去的时间可以自己定 如:select * from TABLE_NAME AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' MINUTE)
‘贰’ oracle数据库误操作把表删除了,怎么找回
一:表的恢复x0dx0ax0dx0a 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的。一般步骤有:x0dx0ax0dx0a1、从flash back里查询被删除的表x0dx0ax0dx0a select * from recyclebinx0dx0ax0dx0a2.执行表的恢复x0dx0ax0dx0a flashback table tb to before drop,这里的tb代表你要恢复的表的名称。x0dx0ax0dx0a二:表数据恢复x0dx0ax0dx0a 对误删的表记录,只要没有truncate语句,就可以根据事务的提交时间进行选择恢复,一般步骤有:x0dx0ax0dx0a1、先从flashback_transaction_query视图里查询,视图提供了供查询用的表名称、事务提交时间、UNDO_sql等字段。x0dx0ax0dx0a 如:select * from flashback_transaction_query where x0dx0atable_name='TEST'x0dx0ax0dx0a 2、执行表记录恢复x0dx0ax0dx0a 一般先根据时间进行查询,查询语句模式为select * from tb as of timestamp x0dx0ato_timestamp(time,'yyyy-mm-dd hh24:mi:ss'); tb指表名称,time指某个时间点x0dx0ax0dx0a 如select * from scott.test as of timestamp to_timestamp(-12-11 x0dx0a20:53:57','yyyy-mm-dd hh24:mi:ss');x0dx0ax0dx0a 若有数据,恢复极为简单了,语句为flashback table tb to timestamp x0dx0ato_timestamp(time,'yyyy-mm-dd hh24:mi:ss');x0dx0ax0dx0a 如flashback table scott.test to timestamp to_timestamp(-12-11 x0dx0a20:47:30','yyyy-mm-dd hh24:mi:ss');x0dx0ax0dx0a注意:alter table testvarchar enable row movement;x0dx0ax0dx0a 这个命令的作用是,允许Oracle 修改分配给行的rowid。在Oracle x0dx0a中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。闪回表处理会对EMP x0dx0a完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。要支持闪回就必须允许Oracle 执行这个操作
‘叁’ oracle数据库数据删除后如何恢复
Oracle DBA神器:PRM灾难恢复工具,Schema级别数据恢复。PRM For Oracle Database – schema级别oracle数据库数据恢复特性 ,PRM即ParnassusData Recovery Manager是企业级别Oracle数据库灾难恢复工具。PRM可以在无备份的情况下恢复被truncated掉的表,也可以恢复无法打开的Oracle数据库(Alter Database Open失败)中的数据。 PRM是图形化增强版的Oracle DUL工具,同时具备很多Oracle DUL不具备的特性
‘肆’ Oracle数据库软件删除后数据有办法恢复么
1、如果你没有删除数据库文件:
我的是放在[D:\oracle\proct\10.1.0\oradata]这个下面,你的肯定也是在[oradata]这个文件夹下面,看看有没有被删除,如果没有被删除的话,看看这么文件夹里面的文件夹叫什么名字,并把里面的那个文件夹备份一份。
2、重新安装数据库,再重新建一个[oradata]下面文件夹名字相同的数据库实例。
3、安装完毕后,停止oracle相关的所有服务,把你备份的那个文件夹覆盖到新的[oradata]下面,重新启动数据库服务即可完成恢复。
补充:如果数据库文件被你删除了,用EasyRecovery
Professional
恢复一下再按照上面的步骤恢复一下即可。
---
以上,希望对你有所帮助。
‘伍’ Oracle 误删控制文件,oracle 数据库没重启的情况下,怎么恢复
Linux 平台误删 oracle 数据文件的恢复方法
模拟误操作:
数据库在正常运行,人工直接rm 掉了数据文件。
--1.测试环境情况:
$ cat /etc/redhat-release
CentOS release 6.5 (Final)
select file_name from dba_data_files;
/u01/app/oracle/oradata/orcl/test.dbf
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Proction on 星期四 3月 5 15:55:14 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Proction
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
开启数据库归档
archive log list;
数据库日志模式 非存档模式
自动存档 禁用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 3002
当前日志序列 3004
mkdir /u01/arch
alter system set log_archive_dest_1='location=/u01/arch' scope=spfile;
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1.0088E+10 bytes
Fixed Size 2261928 bytes
Variable Size 1644170328 bytes
Database Buffers 8422162432 bytes
Redo Buffers 19595264 bytes
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 /u01/arch
最早的联机日志序列 3002
下一个存档日志序列 3004
当前日志序列 3004
SQL> alter database open;
数据库已更改。
SQL> select open_mode from v$database;
OPEN_MODE
------------------------------------------------------------
READ WRITE
--2.新建测试数据
select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/users01.dbf
SQL> create tablespace wind datafile '/u01/app/oracle/oradata/orcl/wind01.dbf' size 200m;
SQL> create user wind identified by wind01 default tablespace wind;
SQL> grant connect,resource,dba to wind;
$ sqlplus wind/wind01
create table t1
(
sid int not null primary key,
sname varchar2(10)
)
tablespace wind;
--循环导入数据
declare
maxrecords constant int:=100000;
i int :=1;
begin
for i in 1..maxrecords loop
insert into t1 values(i,'ocpyang');
end loop;
dbms_output.put_line(' 成功录入数据! ');
commit;
end;
/
select count(*) from t1;
COUNT(*)
----------
100000
--3.模拟删除数据
SQL> col tablespace_name for a20
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
-------------------- ---------------------------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
TTSPACE ONLINE
OCPYANG ONLINE
OCPYANGINDEX ONLINE
LOBOCPYANG ONLINE
LOBOCPYANG01 ONLINE
LOBOCPYANG02 ONLINE
TABLESPACE_NAME STATUS
-------------------- ---------------------------
WIND ONLINE
rm -rf /u01/app/oracle/oradata/orcl/wind01.dbf
ls /u01/app/oracle/oradata/orcl/ | grep wind
SQL> show user;
USER 为 "WIND"
SQL> select count(*) from t1;
COUNT(*)
----------
100000
SQL> desc t1
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
SID NOT NULL NUMBER(38)
SNAME VARCHAR2(10)
SQL> delete from t1 where sid>99000;
已删除1000行。
SQL> commit;
提交完成。
SQL> select count(*) from t1;
COUNT(*)
----------
99000
--4.恢复
ps -eaf|grep dbw0 |grep -v grep
oracle 1928 1 0 15:59 ? 00:00:00 ora_dbw0_orcl
SQL> col tablespace_name for a20
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
-------------------- ---------------------------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
TTSPACE ONLINE
OCPYANG ONLINE
OCPYANGINDEX ONLINE
LOBOCPYANG ONLINE
LOBOCPYANG01 ONLINE
LOBOCPYANG02 ONLINE
TABLESPACE_NAME STATUS
-------------------- ---------------------------
WIND ONLINE
cd /proc/1928/fd
ll
lr-x------ 1 oracle oinstall 64 Mar 5 16:20 0 -> /dev/null
l-wx------ 1 oracle oinstall 64 Mar 5 16:20 1 -> /dev/null
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 10 -> /u01/app/oracle/proct/11.2.0/db_1/dbs/lkORCL
lr-x------ 1 oracle oinstall 64 Mar 5 16:20 11 -> /u01/app/oracle/proct/11.2.0/db_1/rdbms/mesg/oraus.msb
l-wx------ 1 oracle oinstall 64 Mar 5 16:20 2 -> /dev/null
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 256 -> /u01/app/oracle/oradata/orcl/control01.ctl
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 257 -> /u01/app/oracle/fast_recovery_area/orcl/control02.ctl
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 258 -> /u01/app/oracle/oradata/orcl/system01.dbf
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 259 -> /u01/app/oracle/oradata/orcl/sysaux01.dbf
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 260 -> /u01/app/oracle/oradata/orcl/undotbs01.dbf
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 261 -> /u01/app/oracle/oradata/orcl/users01.dbf
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 262 -> /u01/app/oracle/oradata/orcl/ttspace01.dbf
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 263 -> /u01/app/oracle/oradata/orcl/ocpyang01.dbf
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 264 -> /u01/app/oracle/oradata/orcl/ocpyangindex01.dbf
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 265 -> /u01/app/oracle/oradata/orcl/lobocpyang01.dbf
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 266 -> /u01/app/oracle/oradata/orcl/lobocpyang0101.dbf
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 267 -> /u01/app/oracle/oradata/orcl/lobocpyang0202.dbf
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 268 -> /u01/app/oracle/oradata/orcl/temp01.dbf
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 269 -> /u01/app/oracle/oradata/orcl/wind01.dbf (deleted) --注
lr-x------ 1 oracle oinstall 64 Mar 5 16:20 3 -> /dev/null
lr-x------ 1 oracle oinstall 64 Mar 5 16:20 4 -> /dev/null
lr-x------ 1 oracle oinstall 64 Mar 5 16:20 5 -> /dev/null
lr-x------ 1 oracle oinstall 64 Mar 5 16:20 6 -> /u01/app/oracle/proct/11.2.0/db_1/rdbms/mesg/oraus.msb
lr-x------ 1 oracle oinstall 64 Mar 5 16:20 7 -> /proc/1928/fd
lr-x------ 1 oracle oinstall 64 Mar 5 16:20 8 -> /dev/zero
lrwx------ 1 oracle oinstall 64 Mar 5 16:20 9 -> /u01/app/oracle/proct/11.2.0/db_1/dbs/hc_orcl.dat
直接cp该句柄文件名回原位置:
$ pwd
/proc/1928/fd
cp /proc/1928/fd/269 /u01/app/oracle/oradata/orcl/wind01.dbf
NOTE:
由于数据库一直是打开使用的,数据在不断变更则SCN也会不断的变化,
cp数据文件和数据库当前的信息明显不一致,此时需要对数据文件进行recover.
--脱机数据文件
alter database datafile '/u01/app/oracle/oradata/orcl/wind01.dbf' offline;
select count(*) from t1;
第 1 行出现错误:
ORA-00376: 此时无法读取文件 11
ORA-01110: 数据文件 11: '/u01/app/oracle/oradata/orcl/wind01.dbf'
--恢复数据文件
recover datafile '/u01/app/oracle/oradata/orcl/wind01.dbf';
--联机数据文件
alter database datafile '/u01/app/oracle/oradata/orcl/wind01.dbf' online;
select count(*) from t1;
COUNT(*)
----------
99000
成功恢复.
‘陆’ oracle误删数据怎样恢复
用闪回
命令如下
alter
table
表名
enable
row
movement;--启动的行移动功能
flashback
table
表名
to
timestamp
to_timestamp('2011-12-23
10:49:30,'yyyy-MM-dd
hh24:mi:ss');
‘柒’ 怎样在备份的ORACLE数据库DMP文件中恢复包体和过程
一、Oracle数据库备份与恢复步骤
数据库备份与恢复步骤:
1、
导出数据库可以,在DOS窗体执行下边语句:
exp
gdpmp/gdpmp@ora9
exp
gdpmp/gdpmp@ora9
rows=no
将会导出空表。
2、
然后,按照步骤进行确认。
3、
如果是默认路径,将会在C盘根目录生成一个EXPDAT.DMP的文件。
如果不是默认路径,将上述语句改为:
exp
gdpmp/gdpmp@ora9
file=d:\aaa.dmp
也可以。
4、
导入数据库,在DOS窗体执行下边语句:
imp
gdpmp/gdpmp@ora9
file=d:\aaa.dmp
full=y
5、
然后回车就可以了。
【注】前一个gdpmp是用户,后一个是密码。而且改用户需要有DBA的角色。Ora9是数据库连接名字。
二、Oracle数据库备份与恢复步骤
只导出3张表的结构:
exp
user/pasword@dbServerName
owner=user
tables=(tb1,tb2,tb3)
rows=n
file=c:1.dmp
连带数据导出:
exp
user/pasword@dbServerName
owner=user
tables=(tb1,tb2,tb3)
rows=y
file=c:2.dmp
imp
user2/pasword@dbServerName2
fromuser=user
touser=user2
file=c:1.dmp
或者
imp
user2/pasword@dbServerName2
fromuser=user
touser=user2
file=c:2.dmp
三、Oracle数据库备份与恢复步骤
exp/imp工具;
带参数:rows=y
——
带数据导出导入;
rows=n
——
不带数据的导出导入,只移植结构
‘捌’ 在oracle中如何找回被删除的数据
1、首先新建一张测试表TEST,里面输入记录。由于删除/更新/插入恢复步骤相同,这里仅演示删除数据的情况。
‘玖’ oracle误删除了packages,如何恢复
Oracle DBA神器:PRM灾难恢复工具,Schema级别数据恢复。PRM For Oracle Database – schema级别oracle数据库数据恢复特性 ,PRM即ParnassusData Recovery Manager是企业级别Oracle数据库灾难恢复工具。PRM可以在无备份的情况下恢复被truncated/drop掉的表,也可以恢复无法打开的Oracle数据库(Alter Database Open失败)中的数据。 PRM是图形化增强版的Oracle DUL工具,同时具备很多Oracle DUL不具备的特性