Oracle非关键文件恢复,日志成员、临时文件、索引表空间、口令文件(密码文件)

关键性与非关键性

非关键性文件是指数据库和大多数应用程序没有它也能继续运行的文件。例如,如果数据库丢失了一个多路复用重做日志文件,仍可使用其它重做日志文件副本来保持数据库持续运行。

虽然丢失非关键性文件不会导致数据库崩溃,但它会削弱数据库的功能。例如:

丢失索引表空间会导致应用程序和查询的运行速度大幅减慢,或者,如果这些索引用于强制实施约束,则丢失后甚至会导致应用程序无法使用。

丢失联机重做日志组(只要不是当前联机日志组)会导致在 LGWR 下一次尝试写入组时数据库操作被挂起,直到生成新的日志文件为止。

丢失临时表空间会使用户无法运行查询或创建索引,直到将这些用户分配到新的临时表空间为止。

--10g时丢失临时表空间,数据库不能启动,当11g时,丢失了临时文件,数据库会自动创建一个同名同位的临时文件;

--11g中发生此情时发生这种情况时,启动过程中会在预警日志中显示类似下面的消息:

--

Re-creating tempfile /u01/app/oracle/oradata/orcl/temp01.dbf

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

一、日志成员丢失:

要处理重做日志文件的丢失问题,了解重做日志组的可能状态非常重要。在 Oracle DB 正常运行过程中,重做日志组会循环经历三种不同的状态。按照循环的顺序,状态分别是:

CURRENT:此状态表明 LGWR 正在向重做日志组写入数据,以记录数据库中正在进行的所有事务处理的重做数据。该日志组将保持此状态,直到切换至其它日志组为止。

ACTIVE:重做日志组仍包含恢复实例所需的重做数据。这是尚未执行检查点期间重做日志组所处的状态,重做日志组中出现的所有数据更改都将写出到数据文件。

INACTIVE:上述检查点已经执行,这表示不再需要该重做日志组来恢复实例,它可以变为下一个 CURRENT 日志组。

对在线redo log的操作:

查看日志组的状态:

[email protected]>select GROUP#,SEQUENCE#,MEMBERS,ARCHIVED,STATUS from v$log;

GROUP#  SEQUENCE#    MEMBERS ARC STATUS

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

1          7          2 YES INACTIVE

2          8          2 NO  CURRENT

3          6          2 YES INACTIVE

查看日志文件的状态:

[email protected]>select GROUP# ,TYPE,MEMBER from v$logfile;

GROUP# TYPE       MEMBER

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

3 ONLINE

/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_3_b22567o2_.log

3 ONLINE

/u01/app/oracle/fast_recovery_area/PROD/onlinelog/o1_mf_3_b2256827_.log

2 ONLINE

/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_2_b2255zsg_.log

2 ONLINE

/u01/app/oracle/fast_recovery_area/PROD/onlinelog/o1_mf_2_b22560gb_.log

1 ONLINE

/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_1_b2255npg_.log

1 ONLINE

/u01/app/oracle/fast_recovery_area/PROD/onlinelog/o1_mf_1_b2255nxl_.log

6 rows selected.

1.当某个日志组中的一个数据文件丢失,对其在线操作,先添加,再删除;

alter database add logfile member ‘/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_2_b_.log‘ to group 2;

alter database drop logfile member ‘/u01/app/oracle/oradata/PROD/onlinelog/o1_mf_1_b2255npg_.log‘ to group 2;

2.在线添加一个组,再添加一个成员;

[email protected]>alter database add logfile group 4 ‘/u01/app/oracle/oradata/ORCL/onlinelog/redo04.log‘size 100m;

[email protected]>alter database add logfile member‘/u01/app/oracle/oradata/ORCL/onlinelog/redo04_b.log‘ to group 4;

3.查看日志组及成员;

[email protected]>select GROUP#,members,BYTES/1024/1024 size_M,STATUS,ARCHIVED from v$log;

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

二、丢失临时文件:

1.--查看临时文件的位置及名称

SYS>select name from v$tempfile;

/u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b22570tq_.tmp

2.--删除临时文件

SYS>!rm /u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b22570tq_.tmp

3.--触发错误,临时文件未找到

SYS>create global temporary table tab_temp as select * from dba_objects;

create global temporary table tab_temp as select * from dba_objects

*

ERROR at line 1:

ORA-01116: error in opening database file 201

ORA-01110: data file 201:

‘/u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b22570tq_.tmp‘

ORA-27041: unable to open file

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

4.在知道临时数据文件丢失时,可以不需要重新启动数据库就可以在丢失了临时文件后进行恢复;

SQL> ALTER TABLESPACE temp ADD TEMPFILE ‘/u01/app/oracle/oradata/orcl/temp02.dbf‘ SIZE 20M;

Tablespace altered.

SQL> ALTER TABLESPACE temp DROP TEMPFILE ‘/u01/app/oracle/oradata/orcl/temp01.dbf‘;

Tablespace altered.

5. 1)在11g中还可以重启数据库,数据库会自动重建临时数据文件,可以查看alert日志看相关信息(一般直接第4步就可以了)

shutdown immediate;

SYS>startup

ORACLE instance started.

Total System Global Area  839282688 bytes

Fixed Size                  2257880 bytes

Variable Size             545262632 bytes

Database Buffers          289406976 bytes

Redo Buffers                2355200 bytes

Database mounted.

Database opened.

SYS>select name from v$tempfile;

/u01/app/oracle/oradata/PROD/datafile/o1_mf_temp_b29o0g6r_.tmp

1 row selected.

--数据库重建

2)在11g以前,如数据库不能重起,可以创建新的临时表空间:

create temporary tablespace temp2 tempfile

‘/u01/app/oracle/oradata/orcl/temp2.dbf‘ size 10m reuse autoextend on  maxsize  200m;

SQL>alter database default temporary tablespace temp2;

--将新的表空间设置为默认的临时表空间

SQL>drop tablespace temp including contents and datafiles;

--删除旧的表空间及其数据

SQL>ALTER TABLESPACE temp ADD TEMPFILE ‘/u01/app/oracle/oradata/orcl/temp2.dbf‘ SIZE 20M;

--给临时表空间添加文件

SYS>select * from database_properties

where property_name=‘DEFAILT_TEMP_TABLESPACE‘;  --查看当前数据库默认数据库

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

三、重建索引、丢失了索引表空间后进行恢复

重新创建索引

使用以下选项可缩短创建索引所花费的时间:

PARALLEL NOLOGGING

PARALLEL(NOPARALLEL 是默认值):多个进程可以同时协同工作来创建索引。与单个服务器进程按顺序创建索引相比,通过在多个服务器进程之间分配创建索引所需的工作,Oracle 服务器可以更快速地创建索引。将随机对表取样并找到一组索引关键字,这些索引关键字按照指定的并行度将索引平均分为相同数目的片段。第一组查询进程将扫描表,提取关键字、行 ID 对并基于关键字将每个对发送到第二组查询进程中的一个进程中。第二组中的每个进程都对关键字进行排序并按常规方式构建索引。所有索引片段构建完成后,并行协调程序会将这些片段(已进行排序)级联以形成最终的索引。

SQL> CREATE INDEX rname_idx

ON hr.regions (region_name)

PARALLEL 4;

NOLOGGING:使用此关键字会加快索引的创建速度,因为创建进程创建的重做日志 条目极少。这种工作量大幅减小的重做生成也适用于直接路径插入和 Direct Loader (SQL*Loader) 插入。这是永久性属性,因此将显示在数据字典中。可以随时使用 ALTER INDEX NOLOGGING/LOGGING 命令来加以更新。

注:若数据库在nologging状态时,所操作的数据应该备份,再将nologging改回来,以免重大失误难以恢复

丢失了索引表空间后进行恢复:

索引丢失时,更为快速、简单的方法是重新创建而不是尝试恢复索引。

索引是计算得到的对象,因为它们不提供任何原始数据,只是已存在数据的另一表示形式。因此,在大多数情况下,可以很容易地重新创建索引。

如果您的表空间仅包含索引,则可以简化在丢失了属于该表空间的数据文件后的恢复工作。

如果丢失了此类数据文件,则可以执行以下步骤:

1.删除数据文件。

2.删除表空间。 3.重新创建索引表空间。

4.重新创建包含在表空间中的索引。

1.可以在不执行 RECOVER 任务的情况下恢复仅包含索引的表空间。

2.如果属于仅包含索引的表空间的数据文件丢失,则更为简单的方法可能是重新创建表空间和重新创建索引。

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

四、重新创建口令验证文件

1.密码文件丢失

cd  $ORACLE_HOME/dbs  --密码文件的位置

ls -lrt|grep orapw

rm orapw...  --删除密码文件

2.登陆

SQL> CONNECT sys/admin AS SYSDBA

--登陆失败,未找到密码文件

3.另一种方式登录:

sqlplus / as sysdba

--os级别登陆

grant sysdba to hr;

--授权sysdba给hr,会报错;

SQL> grant sysdba to admin2;

grant sysdba to admin2

*

ERROR at line 1:

ORA-01994: GRANT failed: password file missing or disabled

4.创建密码文件

[[email protected] ~]$ orapwd

Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>

where

file - name of password file (required),

password - password for SYS will be prompted if not specified at command line,

entries - maximum number of distinct DBA (optional),

force - whether to overwrite existing file (optional),

ignorecase - passwords are case-insensitive (optional),

nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).

There must be no spaces around the equal-to (=) character.

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

orapwd file=filename password=password entries=max_users

其中:

--

filename 是口令文件的名称(必需)。

--

password 是 SYS 的口令(可选)。如果未包含 password 参数,则会收到提示,要求您输入口令。

--

Entries 是允许以 SYSDBA 或 SYSOPER 身份连接的不同用户的最大数量。如果超出了此数值,必须创建新口令文件。使用较大的数值比较保险。

--“等号”(=) 字符两边没有空格。

--示例:$ orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle entries=5

5.验证密码文件是否可用

SQL> CONNECT sys/admin AS SYSDBA

SQL> grant sysdba to admin2;

面向数据库管理员的验证方法

根据是希望在数据库所在的那一台计算机上本地管理数据库,还是希望从一个远程客户机管理许多不同的数据库服务器,可以选择使用操作系统验证或口令文件验证来验证数据库管理员:

如果数据库具有口令文件且您已经具有 SYSDBA 或 SYSOPER 系统权限,则可以通过口令文件进行验证。

如果服务器未使用口令文件,或者您不具有 SYSDBA 或 SYSOPER 权限因而不在口令文件中,则可以使用操作系统验证。在大多数操作系统中,数据库管理员的验证需要将数据库管理员的操作系统用户名放置到一个特殊组中,一般称为 OSDBA。该组中的用户将被授予 SYSDBA 权限。一个类似的组 OSOPER 用于向用户授予 SYSOPER 权限。

操作系统验证优先于口令文件验证。特别是,如果您是操作系统的 OSDBA 或 OSOPER 组的成员,并且以 SYSDBA 或 SYSOPER 身份连接,则连接时您将具有相关的管理权限,而与您指定的用户名/口令无关。

Oracle DB 提供了一个口令实用程序 orapwd 来创建口令文件。使用 SYSDBA 权限连接时,是以 SYS 方案连接,而不是以与用户名关联的方案连接。对于 SYSOPER,则将连接到 PUBLIC 方案。使用口令文件访问数据库的权限由授权用户发出的 GRANT 命令提供。

通常,口令文件不包含在备份中,因为几乎在所有情况下,均可方便地重新创建口令文件。

保护口令文件以及标识口令文件位置的环境变量对于系统安全性是至关重要的。对这些文件和环境变量具有访问权限的任何用户都可能潜在地影响连接的安全性。

如果使用 REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE 或 SHARED 装载了数据库或实例,则不应删除或修改口令文件。否则,将无法使用该口令文件从远程重新连接。

注:口令区分大小写,在重新创建口令文件时必须考虑到这一点。

了解数据库设置表:

[email protected]>desc database_properties

Name                                      Null?    Type

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

PROPERTY_NAME                             NOT NULL VARCHAR2(30)

PROPERTY_VALUE                                     VARCHAR2(4000)

DESCRIPTION                                        VARCHAR2(4000)

时间: 2024-08-08 17:49:48

Oracle非关键文件恢复,日志成员、临时文件、索引表空间、口令文件(密码文件)的相关文章

用热备+归档恢复损坏的非系统表空间

通常,我们都是用RMAN去还原数据文件,再利用归档做恢复,如果没有有效的备份集,但是有热备份生成的文件,那么一样可以进行恢复,这里演示的是非系统表空间对应的数据文件损坏后的恢复. --首先获取热备份的语句 SQL> select 'alter tablespace '||tablespace_name|| ' begin backup;' 2  ||chr(10) 3  ||'cp '||file_name||' /u01/' 4  ||chr(10) 5  ||'alter tablespac

恢复非当前的还原表空间

恢复费当前的还原表空间实际上就是删除原来的还原表空间和对应的数据文件,然后重建还原表空间和与之对应的数据文件.因为非当前的还原表空间不在数据库的备份行列中,对非当前的还原表空间,oracle系统根本不会用到.所以回复非当前的还原表空间可以直接删除然后重建即可.. 一.非当前还原表空间崩溃后要shutdown数据库库 shutdown immediate: 二.重启数据库获得崩溃的数据库文件的文件号 startup 三.提示无法标识/锁定文件(文件号) 数据文件(文件号)......文件名....

表空间tablespace,数据文件datafiles,和控制文件control files介绍

https://docs.oracle.com/cd/B19306_01/server.102/b14220/physical.htm#i5919 本文系翻译 表空间tablespace,数据文件datafiles,和控制文件control files介绍 在逻辑上,oracle把数据存储在表空间tablespace中,而在物理上,数据是存储在datafiles中的. 图1 图1很好的诠释了表空间与数据文件的关系,这里这一个表空间对应了两个数据文件,而数据对象如表.索引等,他们只关心表空间,对物

Oracle 11g常用管理命令(用户、表空间、权限)

PS:下面是Oracle 11g最常用的基本管理命令,包括创建用户.表空间,权限分配等.以下命令本人都验证操作过,并加上了本人的小结与说明. 1.启动oracle数据库: 从root切换到oracle用户进入: su - oracle 进入sqlplus环境,nolog参数表示不登录: sqlplus /nolog 以管理员模式登录: sqlplus / as sysdba 启动数据库 startup; 停止数据库 shutdown immediate 远程连接数据库 sqlplus /nolo

【翻译自mos文章】oracle数据库的最大数据容量限制和表空间的最大数据容量限制

oracle数据库的最大数据容量限制和表空间的最大数据容量限制 参考原文: What Is The Maximum Tablespace Size And Database Limit For An Oracle Database ? (Doc ID 1372905.1) 适用于: Oracle Database - Enterprise Edition - Version 10.1.0.2 to 11.2.0.3 [Release 10.1 to 11.2] Oracle Database -

Oracle 查看索引表空间

Oracle 查看表空间的使用情况或表空间的大小,应该如何实现呢?下面就为您介绍实现 Oracle 查看表空间方面的语句. 1.查看表空间的使用情况 Java代码   select sum(bytes)/(1024*1024) as free_space,tablespace_name from dba_free_space group by tablespace_name; SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES

ORACLE 查看当前用户信息(用户,表视图,索引,表空间,同义词,存储过程,约束条件)

1.用户 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 显示当前会话所具有的权限 SQL>select * from sessi

Oracle 12c创建PDB用户并设置默认表空间

Oracle12c 中,增加了可插接数据库的概念,即PDB,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB).CDB全称为 ContainerDatabase,中文翻译为数据库容器,PDB全称为PluggableDatabase,即可插拔数据库.下面是官方文档关于CDB与PDB的关系图. 在CDB中,只能创建以c##或C##开头的用户,如果不加c##,则会提示错误“ORA-65096:公用用户名或角色名无效”,只有在PDB数据库中才能创建我们习惯性命名的用户,oracle称之为Loca

修改表空间(修改数据文件的自动扩展性)

在创建表空间时,可以设置数据文件的自动扩展性.在为表空间增加新的数据文件时,也 可以设置新数据文件的自动扩展性.而对于已创建的表空间中的已有的数据文件,则可以使用 alter database语句修改其自动扩展性,其语法如下: alter database datafile file_name autoextend off|on[next number K|M maxsize unlimited|number K|M] 修改表空间中数据文件的状态 数据文件的状态主要有三种,onlne,offli