ORACLE模拟临时文件、日志成员、口令文件丢失情况与恢复【weber出品】
一、临时表空间文件、日志文件和口令文件都属于非关键性文件,因为这些文件丢失后并不会影响到整个数据库的完整性。
但是,当这些文件丢失后我们需要快速的找回这些文件。接下来我将模拟临时表空间文件、日志文件和口令文件丢失的情况。
二、如果属于 TEMP 表空间的临时文件丢失或损坏,则 TEMP 表空间将不可用。例如:在执行需要 TEMP 空间进行排序的 SQL 语句过程中,此问题将声明其为错误。
一般会用到临时表空间的场景有:
索引create或rebuild
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的语句就可以成功了。因为临时文件的内容不是非常的重要,属于可有可无的那种,没有了重建就是了。
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出品】的更多相关文章
- ORACLE调度之基于事件的调度(二)【weber出品】
一.回顾 调度分基于时间的调度和基于事件的调度. 稍微复习一下前面的只是请浏览:<ORACLE调度之基于时间的调度(一)[weber出品]> 二.知识补充 1.队列:一种数据结构,就像一根 ...
- ORACLE调度之基于时间的调度(一)【weber出品】
一.调度的概述 这里我看到一篇对调度的概述觉得描述的比我好,但仅限于概述部分,其他部分我觉得我讲的比他好,于是发生以下事情: ************************华丽的转载******** ...
- ORACLE网络配置大全没有比这个更详细的【weber出品】
一.起篇 现在怎么说也是互联网时代,数据库也要联网,很多朋友学习Oracle的时候无外乎搭建的是以下两种学习环境: 1.直接在windows环境下安装Oracle后直接sqlplus连接. 2.在wi ...
- Oracle 口令文件:即 oracle密码文件
一:文件路径位置 [oracle@localhost db_1]$ cd $ORACLE_HOME/dbs [oracle@localhost dbs]$ ls dbsorapwPROD1 hc_or ...
- DG备库无法接受主库归档日志之密码文件
DG备库无法接受主库归档日志之密码文件 实验目的:还原某个客户案例,客户审计需要,对主库sys用户进行锁定,一小时后对sys用户进行解锁后,发现备库无法接受主库的归档日志 本篇文章,测试sys用户与D ...
- Oracle的sqlnet.ora与password文件试验
先看有没有sqlnet.ora [oracle@localhost ~]$ cd $ORACLE_HOME[oracle@localhost dbhome_1]$ cd network[oracle@ ...
- Oracle控制文件丢失,日志文件丢失
控制文件丢失: alter database backup controlfile to traces; shutdown immediate; @j:\db\script\orcl_ora_ctl_ ...
- Oracle OS认证 口令文件 密码丢失处理
Oracle OS认证 口令文件 密码丢失处理 分类: Oracle Basic Knowledge2009-10-19 14:24 5031人阅读 评论(9) 收藏 举报 oracleos数据库sq ...
- 【恢复】Redo日志文件丢失的恢复
第一章 Redo文件丢失的恢复 1.1 online redolog file 丢失 联机Redo日志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢 ...
随机推荐
- 网页通用的测试用例(出处:: 51Testing-- lxp1119216)
此题的考察目的:面试者是否熟悉各种测试方法,是否有丰富的Web测试经验, 是否了解Web开发,以及设计Test case的能力 这个题目还是相当有难度的, 一般的人很难把这个题目回答好. 首先,你要了 ...
- js获取url?后的参数
function GetRequest() { var url = location.search; //获取url中"?"符后的字串 var theRequest = new O ...
- [译] 什么是移动友好的 - Mobile-friendliness
什么是移动友好的? 移动友好到底意味着什么取决于您与谁讨论它. 我们不妨这样理解: 移动友好的设计以 表现力, 内容和性能 三方面为目标来改善用户体验. 表现力 - Presentation ...
- centos 下 apache 重启启动命令
apache 启动 usr/local/apache243/bin/apachectl start apache 重启 usr/local/apache243/bin/apachectl restar ...
- Number对象
<script type="text/javascript"> /* Number对象. 创建Number对象的方式: 方式1: var 变量= new Number( ...
- java获取当前时间
/////////////////获取时间方法一////////////////////////////// java.util.Date uDate=new java.util.Date(); Sy ...
- 简单DOS命令实现局域网Windows远程关机
1秒内重启局域网内计算机名为ppgsvr-pc的用户电脑shutdown -r -m \\ComputerName -t 1 1秒内关闭局域网内ppgsvr用户电脑shutdown -s -m \\C ...
- sigaction 用法实例
sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作). 他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该 ...
- android实现类似于支付宝余额快速闪动的效果
效果如下: 此图片不会动,但实际上是会快速跳动的. 之前看到有支付宝的效果非常牛逼.就是进去看到余额呼噜噜的直接上蹿下跳到具体数字,效果帅,但不知道怎么实现,最近终于知道了. 思路: 首先经常用 ...
- strcpy完整版 与 strcpy为什么有返回值
一个标准的strcpy函数: 原本以为自己对strcpy还算比较了解,结果面试时还是悲剧了. 下面给出网上strcpy的得分版本: 2分 void strcpy( char *strDest, cha ...