一、临时表空间文件、日志文件和口令文件都属于非关键性文件,因为这些文件丢失后并不会影响到整个数据库的完整性。

    但是,当这些文件丢失后我们需要快速的找回这些文件。接下来我将模拟临时表空间文件、日志文件和口令文件丢失的情况。

二、如果属于 TEMP 表空间的临时文件丢失或损坏,则 TEMP 表空间将不可用。例如:在执行需要 TEMP 空间进行排序的 SQL 语句过程中,此问题将声明其为错误。

  一般会用到临时表空间的场景有:

  索引create或rebuild

Order by 或 group by
Distinct 操作
Union 或 intersect 或 minus
Sort-merge joins
analyze
现在我们模拟临时文件丢失,但是在排序order by 的时候要用到的场景:

select NAME from v$tempfile;

NAME
--------------------------------------------------------------------------------
/u01/oracle/oradata/orcl/temp02.dbf SQL> show parameter pga NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 192M
SQL> alter system set pga_aggregate_target=10M;

把pga_aggregate_target给调小些,这样order by的时候就一定会用到临时文件了。

  在操作系统中,把这个临时文件给删除:

rm -rf /u01/oracle/oradata/orcl/temp02.dbf

创建模拟表

SQL> conn scott/tiger

SQL> create table temp_table as select * from all_objects;

SQL> insert into temp_table select * from all_objects;

SQL> commit;

SQL> SQL> select * from temp_table order by ,,,,,,,,,,,,;
select * from temp_table order by ,,,,,,,,,,,,
*
ERROR at line :
ORA-: error in opening database file
ORA-: data file : '/u01/oracle/oradata/orcl/temp01.dbf'
ORA-: unable to open file
Linux Error: : No such file or directory
Additional information:

不需要重新启动数据库就可以恢复丢失的 TEMPFILE。

如果要恢复数据库,可以先在数据库中添加一个新的数据文件,然后删除那个已在 OS 层删除的数据文件。

SQL> conn / as sysdba
Connected.
SQL> ALTER TABLESPACE temp ADD TEMPFILE '/u01/oracle/oradata/orcl/temp02.dbf' SIZE 20M;
Tablespace altered.
SQL> ALTER TABLESPACE temp DROP TEMPFILE '/u01/oracle/oradata/orcl/temp01.dbf';
Tablespace altered.
SQL> select name from v$tempfile; NAME
--------------------------------------------------------------------------------
/u01/oracle/oradata/orcl/temp02.dbf

再次执行order by的语句就可以成功了。因为临时文件的内容不是非常的重要,属于可有可无的那种,没有了重建就是了。

三、在线重做日志始终是以下三种状态之一:current、inactive、active。所以重做日志的备份和恢复就要分三种了。
  其实你只要懂得额current状态下的重做日志的恢复就懂得了剩下两种的情况是如何恢复的。
  如果状态为INACTIVE的日志组中的所有成员丢失:  

select a.group#,a.sequence#,a.archived,a.status,b.member from v$log a,v$logfile b
where a.group#=b.group#
order by ; GROUP# SEQUENCE# ARC STATUS MEMBER
------ --------- --- -------- ------------------------------------------
YES CURRENT /u01/oracle/oradata/orcl/redo01.log
YES CURRENT /u01/oracle/oradata/orcl/redo0101.log
NO INACTIVE /u01/oracle/oradata/orcl/redo0201.log
NO INACTIVE /u01/oracle/oradata/orcl/redo02.log
YES INACTIVE /u01/oracle/oradata/orcl/redo0301.log
YES INACTIVE /u01/oracle/oradata/orcl/redo03.log SQL> !rm -rf /u01/oracle/oradata/orcl/redo01.log SQL> !rm -rf /u01/oracle/oradata/orcl/redo0101.log

接下来将current转换成active状态:

SQL> alter system switch logfile;--先让其变成ACTIVE

System altered.

SQL> select a.group#,a.sequence#,a.archived,a.status,b.member from v$log a,v$logfile b
where a.group#=b.group#
order by ; GROUP# SEQUENCE# ARC STATUS MEMBER
------ --------- --- -------- ------------------------------------------
NO ACTIVE /u01/oracle/oradata/orcl/redo01.log
NO ACTIVE /u01/oracle/oradata/orcl/redo0101.log
NO CURRENT /u01/oracle/oradata/orcl/redo0201.log
NO CURRENT /u01/oracle/oradata/orcl/redo02.log
YES INACTIVE /u01/oracle/oradata/orcl/redo0301.log
YES INACTIVE /u01/oracle/oradata/orcl/redo03.log rows selected. SQL> alter system checkpoint;--再让其变成INACTIVE System altered. SQL> select a.group#,a.sequence#,a.archived,a.status,b.member from v$log a,v$logfile b
where a.group#=b.group#
order by ; GROUP# SEQUENCE# ARC STATUS MEMBER
------ --------- --- -------- ------------------------------------------
NO INACTIVE /u01/oracle/oradata/orcl/redo01.log
NO INACTIVE /u01/oracle/oradata/orcl/redo0101.log
NO CURRENT /u01/oracle/oradata/orcl/redo0201.log
NO CURRENT /u01/oracle/oradata/orcl/redo02.log
YES INACTIVE /u01/oracle/oradata/orcl/redo0301.log
YES INACTIVE /u01/oracle/oradata/orcl/redo03.log rows selected.

关闭数据库,启动到mounted状态下:

SQL> shutdown immediate
SQL>startup mount

SQL>alter database clear  unarchived logfile group 1---清除

SQL> alter database open;

Database altered.

SQL>  select a.group#,a.sequence#,a.archived,a.status,b.member from v$log a,v$logfile b

where a.group#=b.group#

order by 1;   2    3

GROUP# SEQUENCE# ARC STATUS   MEMBER

------ --------- --- -------- ------------------------------------------

1        24 NO  CURRENT  /u01/oracle/oradata/orcl/redo01.log

1        24 NO  CURRENT  /u01/oracle/oradata/orcl/redo0101.log

2        23 YES INACTIVE /u01/oracle/oradata/orcl/redo0201.log

2        23 YES INACTIVE /u01/oracle/oradata/orcl/redo02.log

3        21 YES INACTIVE /u01/oracle/oradata/orcl/redo0301.log

3        21 YES INACTIVE /u01/oracle/oradata/orcl/redo03.log

好了,这样重做日志组1就回来了。不过,current日志组的成员如果一旦两个都坏了,虽然整个数据还是完整的,但是如果想要恢复current这个业务之前的状态就有不可以了。

 
四、模拟口令文件损坏的情况。

删除口令文件:

cd $ORACLE_HOME/dbs/
rm -rf orapworcl

使用操作系统验证登陆数据库:

[oracle@nylg dbs]$ sqlplus sys/a@orcl as sysdba

SQL*Plus: Release 10.2.0.1. - Production on Sat Aug  :: 

Copyright (c) , , Oracle.  All rights reserved.

ERROR:
ORA-: insufficient privileges Enter user-name:

口令文件丢失,使用口令验证无法登陆,只能通过操作系统验证登陆

[oracle@nylg dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1. - Production on Sat Aug  :: 

Copyright (c) , , Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1. - Production
With the Partitioning, OLAP and Data Mining options SQL>

将 REMOTE_LOGIN_PASSWORDFILE 参数设置为 NONE 并重新启动数据库

REMOTE_LOGIN_PASSWORDFILE 参数有三个值:

NONE:禁止使用口令登陆

EXCLUSIVE:主要是针对于多实例来说的,如果数据库是多实例的,也就是RAC,只允许某个单实例使用口令文件

SHARE:主要是针对于多实例来说的,如果数据库是多实例的,也就是RAC,允许所有的实例共享使用一个口令文件

alter system set REMOTE_LOGIN_PASSWORDFILE=NONE scope=spfile
startup force

使用口令实用程序orapwd创建口令文件

orapwd file=filename password=password entries=max_users 

其中:

filename 是口令文件的名称

password 是 SYSOPER 和 SYSDBA 的口令

Entries 是允许以 SYSDBA 或 SYSOPER 身份连接的最大不同用户数

如果超出了此数值,必须创建新口令文件,使用较大的数值比较保险

等号 (=) 字符两边没有空格

orapwd file=$ORACLE_HOME/dbs/orapworcl password=a entries=

alter system set REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

startup force

使用在创建的口令文件连接到数据库

CONNECT sys/a@orcl AS SYSDBA
 

ORACLE模拟临时文件、日志成员、口令文件丢失情况与恢复【weber出品】的更多相关文章

  1. ORACLE调度之基于事件的调度(二)【weber出品】

    一.回顾 调度分基于时间的调度和基于事件的调度. 稍微复习一下前面的只是请浏览:<ORACLE调度之基于时间的调度(一)[weber出品]> 二.知识补充 1.队列:一种数据结构,就像一根 ...

  2. ORACLE调度之基于时间的调度(一)【weber出品】

    一.调度的概述 这里我看到一篇对调度的概述觉得描述的比我好,但仅限于概述部分,其他部分我觉得我讲的比他好,于是发生以下事情: ************************华丽的转载******** ...

  3. ORACLE网络配置大全没有比这个更详细的【weber出品】

    一.起篇 现在怎么说也是互联网时代,数据库也要联网,很多朋友学习Oracle的时候无外乎搭建的是以下两种学习环境: 1.直接在windows环境下安装Oracle后直接sqlplus连接. 2.在wi ...

  4. Oracle 口令文件:即 oracle密码文件

    一:文件路径位置 [oracle@localhost db_1]$ cd $ORACLE_HOME/dbs [oracle@localhost dbs]$ ls dbsorapwPROD1 hc_or ...

  5. DG备库无法接受主库归档日志之密码文件

    DG备库无法接受主库归档日志之密码文件 实验目的:还原某个客户案例,客户审计需要,对主库sys用户进行锁定,一小时后对sys用户进行解锁后,发现备库无法接受主库的归档日志 本篇文章,测试sys用户与D ...

  6. Oracle的sqlnet.ora与password文件试验

    先看有没有sqlnet.ora [oracle@localhost ~]$ cd $ORACLE_HOME[oracle@localhost dbhome_1]$ cd network[oracle@ ...

  7. Oracle控制文件丢失,日志文件丢失

    控制文件丢失: alter database backup controlfile to traces; shutdown immediate; @j:\db\script\orcl_ora_ctl_ ...

  8. Oracle OS认证 口令文件 密码丢失处理

    Oracle OS认证 口令文件 密码丢失处理 分类: Oracle Basic Knowledge2009-10-19 14:24 5031人阅读 评论(9) 收藏 举报 oracleos数据库sq ...

  9. 【恢复】Redo日志文件丢失的恢复

    第一章 Redo文件丢失的恢复 1.1  online redolog file 丢失 联机Redo日志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢 ...

随机推荐

  1. Java中实现线程的方法

    Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 第一种:继承Thread类 new Thread(){}.start();这表示调 ...

  2. MySQL单列索引和组合索引的区别介绍

    MySQL单列索引和组合索引的区别介绍 作者:佚名出处:IT专家网2010-11-22 13:05 MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引的区别可能有 ...

  3. .NET MVC插件化开发(支持Script和css压缩)

    上一篇博文里面,没有支持Script和css的压缩功能以及script和css的路径问题也没有解决,所以重新发布一个版本,解决了这几个问题,并且优化了插件路由注册,现在可以很方便的实现热插拔web插件 ...

  4. 转:Yelp开发团队发布内部网站设计指南

    原文来自于:http://www.infoq.com/cn/news/2014/02/yelp-style-guide 近日,Yelp开发团队在博客发布消息:Yelp公开了内部网站设计指南.这份文档此 ...

  5. Entity Framework with MySQL 学习笔记一(安装)

    声明 :  数据库是Mysql,本人的程度只到会写sql语句(不会储蓄过程), c# 会基本的ADO.NET数据库访问,LINQ基础. 这篇只做个人学习|温习作用. 新手可以参考,也请高手指正错误, ...

  6. squid+stunnel+用户密码认证的三种玩法

    没办法,应用越来越深入,就会越来越多要求. squid+stunnel+用户密码认证的场景至少以下三个,我会遇到. 1,标准玩法 在服务器上建一个SQUID,加密码认证,然后,其它人通过它上网.(不要 ...

  7. 认识Android

    安卓的特点开放性平等性无界性方便性硬件的丰富性 Android操作系统之中,一共将体系结构划分为四层:应用层(Application).应用框架层(Application Framework).系统运 ...

  8. HDU_2020——按绝对值排序

    Problem Description 输入n(n<=100)个整数,按照绝对值从大到小排序后输出.题目保证对于每一个测试实例,所有的数的绝对值都不相等.   Input 输入数据有多组,每组占 ...

  9. Storm概念介绍

    Storm核心概念如下:  1.Tuple:元组                Tuple即元组,是一个拓扑Topology中的Spout和Bolt组件之间数据传递的基本单元.元组中的字段可以是任何类 ...

  10. aptana 插件离线下载方式

    aptana 插件离线下载方式 Aptana 网站改版后取消了eclipse 插件的zip直接下载地址,其实aptana 官网仍还提供aptana 插件的zip包下载不过比较隐蔽而已.很多人在线安装时 ...