select from v$logfile;
select from v$sql where sql_text like 'delete%';
select from v$sqlarea order by first_load_time desc ;
非归档模式使用:alter database datafile '' offline drop;
归档模式使用: alter database datafile '' offline;
说明:
1) 以上命令只是将该数据文件OFFLINE,而不是在数据库中删除数据文件。该数据文件的信息在控制文件种仍存在。查询v$datafile,仍显示该文件。
2) 归档模式下offline和offline drop效果是一样的
3) offline后,存在此datafile上的对象将不能访问
4) noarchivelog模式下,只要online redo日志没有被重写,可以对这个文件recover后进行online *** 作
实际使用案例:
直接删除数据文件后无法进入系统的解决方案
正常情况下,删除表空间的正确方法为:
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
如果没有通过以上命令删除而直接删除了数据文件,将导致数据库无法打开。
如果直接删除了数据文件
普通用户登录时,则报错:
ORA-01033: ORACLE initialization or shutdown in progress
sys用户可以正常登录
但进行 *** 作时(SELECT count(1) FROM user_tables),则会报错:
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
如果执行命令alter database open以打开数据库时,又报如下错:
ORA-01157: 无法标识/锁定数据文件 12 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 12: 'E:/ORACLE/PRODUCT/1020/ORADATA/ORCL/TSTEST001DBF'
说明数据库没找到这个数据文件
因为数据文件在没有被offline的情况下物理删除了,导致oracle的数据不一致,因此启动失败
通过以下方法即可解决
解决方法:
sqlplus sys/orcl@orcl as sysdba;
SQL> alter database datafile 'E:/ORACLE/PRODUCT/1020/ORADATA/ORCL/TSTEST001DBF' offline drop;
SQL> alter database open;
SQL> drop tablespace CTBASEDATA;
二、Oracle 10G R2开始,可以采用:Alter tablespace tablespace_name drop datafile file_name;来删除一个空数据文件,并且相应的数据字典信息也会清除:
sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='USERS';
FILE_ID FILE_NAME TABLESPACE_NAME
------- -------------------------------------------- ------------------
4 /u01/app/oracle/oradata/orcl/users01dbf USERS
sys@ORCL>alter tablespace users add datafile
2 '/u01/app/oracle/oradata/orcl/users02dbf' size 5M autoextend off;
Tablespace altered
sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='USERS';
FILE_ID FILE_NAME TABLESPACE_NAME
------- -------------------------------------------- -------------------
4 /u01/app/oracle/oradata/orcl/users01dbf USERS
9 /u01/app/oracle/oradata/orcl/users02dbf USERS
sys@ORCL>drop table test;
Table dropped
sys@ORCL>create table test tablespace users
2 as
3 select from dba_objects;
Table created
sys@ORCL>select SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents
2 where file_id=9;
SEGMENT_NAME FILE_ID BLOCKS
------------------------------ ---------- ----------
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 8
TEST 9 128
TEST 9 128
17 rows selected
sys@ORCL>alter table test move tablespace PERFSTAT; --把表移动到其它表空间
Table altered
sys@ORCL>select SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents
2 where file_id=9;
no rows selected
sys@ORCL>alter tablespace users drop datafile
2 '/u01/app/oracle/oradata/orcl/users02dbf';
Tablespace altered
sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files
2 where tablespace_name='USERS';
FILE_ID FILE_NAME TABLESPACE_NAME
------- -------------------------------------------- ---------------------
4 /u01/app/oracle/oradata/orcl/users01dbf USERS
三、oracle 10g可以删除临时表空间的文件
alter database tempfile '/home/oracle/temp01dbf' drop including datafiles;
方法1:使用LogMiner工具
优点:可以完全挖掘日志内容,找出所有执行过的SQL语句
缺点:
1 如果没有启用归档日志,则只能对联机日志进行挖掘
2 需要掌握LogMiner的用法
访法2:查看HIST视图
优点:简单,只要使用普通的select语句查询
缺点:Oracle保留约1周的历史,所以要查太早的就不可能了
-- 找出哪个数据库用户用什么程序在最近三天执行过delete或truncate table的 *** 作
举例如下:
SELECT cusername,
aprogram,
bsql_text,
bcommand_type,
asample_time
如果确实所有的日志文件都被删除了,并且是在数据库还开启的时候删除的,那么数据库肯定有数据丢失,这时候你只能做不完全恢复。
如果你是在干净数据库关闭后误删了日志文件,那不会有数据丢失,重建日志文件就行了,然后open database resetlogs。
以上就是关于请问我想查是谁删除的ORACLE数据库中的数据应该看 *** 作日志吗,怎么看,能查出IP来吗全部的内容,包括:请问我想查是谁删除的ORACLE数据库中的数据应该看 *** 作日志吗,怎么看,能查出IP来吗、怎么删除oracle的数据文件、oracle执行删除语句不记录日志怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)