恢复Oracle表空间的方法

2024-07-12

恢复Oracle表空间的方法(精选8篇)

篇1:恢复Oracle表空间的方法

学习Oracle时,你可能会遇到oracle表空间恢复问题,这里将介绍Oracle表空间恢复问题的解决方法,在这里拿出来和大家分享一下,

Oracle表空间恢复方案

一。用户表空间

错误:

在启动数据库时出现ora-01157,ora-01110或操作系统级错误例如ora-07360, 在关闭数据库(使用shutdown normal或shutdown immediate) 时将导致错误ora -01116,ora-01110以及操作系统级错误ora-07368

以下有两种解决方案:

1.用户的表空间可以被轻易地重建 即最近导出的对象是可用的或表空间中的对象可以被轻易地重建等。在 这种情况下,最简单的方法是offline并删除该数据文件,删除表空间并 重建表空间以及所有的对象。

svrmgrl> startup mount

svrmgrl> alter database datafile filename offline drop;

svrmgrl> alter database open;

svrmgrl> drop tablespace tablespace_name including contents;

重建表空间及所有对象。

2.用户的表空间不能够被轻易地重建在大多数情况下,重建表空间是不可能及太辛苦的工作。方法是倒备份及做介质恢复。如果您的系统运行在noarchivelog模式下,则只有丢失的数据 在online redo log中方可被恢复。

步骤如下:

1)restore the lost datafile from a backup

2)svrmgrl> startup mount

3)svrmgrl> select v1.group#,member,sequence#,first_change# > from v$log v1,v$logfile v2 > where v1.group#=v2.group#;

4)如果数据库运行在noarchivelog模式下则: svrmgrl> select file#,change# from v$recover_file;

如果 change# 大于最小的first_change#则数据文件可以被恢复。 如果 change# 小于最小的first_change#则数据文件不可恢复。 恢复最近一次的全备份或采用方案一。

5)svrmgrl> recover datafile filename;

6)确认Oracle表空间恢复成功

7)svrmgrl> alter database open resetlogs;

3.只读表空间无需做介质恢复,只要将备份恢复即可。唯一的例外是:

表空间在最后一次备份后被改为read-write 模式

表空间在最后一次备份后被改为read-only 模式

在这种情况下,均需进行介质恢复

二。临时表空间

临时表空间并不包含真正的数据,恢复的方法是删除临时表空间并重建即可,

三。系统表空间

如果备份不可用,则只能采用重建数据库的方法

四。回滚表空间

有两种情况:

1、数据库已经完全关闭(使用shutdown immediate或shutdown命令)

1) 确认数据库完全关闭

2) 修改init.ora文件,注释“rollback-segment”

3) svrmgrl> startup restrict mount

4) svrmgrl> alter database datafile filename offline drop;

5) svrmgrl> alter database open;

基于出现的结果:

“statement processed”

“ora-00604,ora-00376,ora-01110”

6) svrmgrl> shutdown immediate 修改init.ora文件,增加如下一行: _corrupted_rollback_segments = (,…) svrmgrl> startup restrict

7) svrmgrl> drop tablespace tablespace_name including contents;

8) 重建表空间及回滚段

9) svrmgrl> alter system disable restricted session;

10) 修改init.ora文件

2、数据库未完全关闭(数据库崩溃或使用shutdown abort命令关闭数据库)

1) Oracle表空间恢复备份

2) svrmgrl> startup mount

3) svrmgrl> select file#,name,status from v$datafile; svrmgrl> alter database datafile filename online;

4) svrmgrl> select v1.group#,member,sequence#,first_change# > from v$log v1,v$logfile v2 > where v1.group#=v2.group#;

5) svrmgrl> select file#,change# from v$recover_file;

6) svrmgrl> recover datafile filename;

7) svrmgrl> alter database open;

3、数据库处于打开状态

1) 删除回滚段和表空间

2) 重建表空间和回滚段

五。控制文件恢复

1.所有的控制文件均被破坏

将备份的控制文件拷贝至原目录下 对于raw device,则:

dd if=con.bak f=/dev/rdrd/drd1 seek=128

2.并非所有的控制文件均被破坏

用其他的控制文件启动数据库

篇2:恢复Oracle表空间的方法

试验目的:全面掌握表空间和数据文件的创建、管理过程 试验内容:

1、创建表空间、增加数据文件

2、管理表空间和数据文件的的各种操作 试验步骤:

1、掌握表空间和数据文件相关的概念

1)oracle默认的表空间

系统默认的表空间:SYSTEM、SYSAUX、UNDOTBS1、EMP、EXAMPLE、USERS 2)系统表空间

SYSTEM、SYSAUX是系统表空间,SYSTEM用于存放oracle数据字典的结构和内部元数据。

SYSAUX是SYSTEM的辅助表空间用于存放个模式(用户)的对象元数据。

3)非系统表空间

由DBA根据需要创建,存放用户自己的数据,也可以包含临时数据以及UNDO数据。

2、创建表空间

1)创建表空间的语法

CREATE [smallfile|bigfile] TABLESPACE tablespace_name DATAFILE ‘/path/filename’ SIZE [k|m] REUSE

[‘/path/filename’ SIZE [k|m] REUSE]

[AUTOEXTEND [ON|OFF] NEXT [k|m] MAXSIZE [UNLIMITED|[K|M]]] [ONLINE|OFFLINE] [LOGGING|NOLOGGING] [PERMANENT|TEMPORARY] [DICTIONARY|LOCAL]

2)定义表空间名字及属性

创建两个表空间ts_test1、ts_test2,本地化管理(Local,默认)、永久表空间(permantent,默认)

3)定义数据文件名字、路径、初始大小、自动扩展等属性

数据文件data_test1、data_test2 路径:c:disk1data_test1.dbf c:disk2data_test2

4)创建脚本:

a、创建本地永久表空间

//创建本地永久表空间ts_test1和ts_test2,默认为永久和本地

SQL>create tablespace ts_test1 datafile ‘c:disk1data_file1.dbf’ size=50m reuse autoextend on next 10m;

SQL>create tablespace ts_test2 datafile ‘c:disk2data_file2.dbf’ size=50m reuse autoextend on next 10m maxsize unlimited;查看一下创建完成的结果

//查看dba_tablespaces结构

SQL>desc dba_tablespaces;

//查看字典中的所有表空间情况,extent_management值为local时为本地表空间 SQL>select tablespace_name,status,extent_management,content from dba_tablespaces;//查看创建表空间时创建的数据文件,首先查看dba_data_files字典结构 SQL>desc dba_data_files;//查看数据文件情况 SQL>set linesize 120 SQL>col file_name for a20 SQL>col file_id for a20 SQL>col tablespace_name a30 SQL>col online_status for a20 SQL>select file_name,file_id,tablespace_name,online_status from dba_data_files;

b、创建还原表空间和临时表空间

//创建还原表空间

SQL>create undo tablespace test_undo datafile ‘c:disk3test_undo’ size 20m;

//查看创建结果,contents为表空间内容类型,如undo

SQL>select tablespace_name,contents from dba_tablespaces;

c、创建临时表空间

//创建临时表空间

SQL>create temporary tablespace test_temp

tempfile ‘c:disk4test_temp.dbf’ size 20m extent management local;

//查询创建结果

SQL>select tablespace_name,extent_management,contents from dba_tablespaces;d、增加数据文件

//增加数据文件

SQL>alter tablespace ts_test1 add datafile ‘c:disk1ts_test11.dbf’ size 10m;

//查看增加数据文件的结果

SQL>col file_name for a30

SQL>col tablespace_name for a30 SQL>select file_name,tablespace_name from dba_data_files;

3、管理表空间的各种操作

1)改变表空间的读写状态

//将表空间设为只读

//这时表空间应为online状态,表空间不能包含回滚段,不能是归档模式

//查看数据库日志模式

SQL>archive log list;//查看表空间contents

SQL>select tablespace_name,contents from dba_tablespaces where tablespace_name like‘TS_%’;

//修改为只读

SQL>alter tablespace ts_test1 read only;2)表空间脱机离线、在线连接

SQL>alter tablespace ts_test1 offline;

SQL>alter tablespace ts_test1 online;

//查看表空间状态

SQL>select tablespace_name,status from dba_tablespaces;3)修改表空间名称 //查询当前表空间名称和所包含的数据文件

SQL>select file_name,tablespace_name from dba_data_files;//确认表空间处在online状态

SQL>select tablespace_name,status from dba_tablespaces;//表空间改名

SQL>alter tablespace ts_test2 rename to ts_test22;//查询修改结果

SQL>Col file_name for a30;SQL>col tablespace_name for a30;SQL>select file_name,tablespace_name from dba_data_files;4)设置默认表空间

SQL>alter database default tablespace users //设置默认临时表空间

SQL>alter database default temporary tablespace temp;5)删除表空间

SQL>drop tablespace ts_test2;//仅删除表空间信息不删除表空间数据文件 SQL>drop tablespace ts_test2 includng contents;//包括数据文件全部删除 查看删除后的结果情况

SQL>select file_name,tablespace_name from dba_data_files;6)切换undo表空间

SQL>alter system set undo_tablespace =undotbs02;7)删除undo表空间

要删除正在使用的undo表空间,首先切换undo表空间后在进行删除 例如删除undost01 SQL>alter system set undo_tablespace=undost02;SQL>drop tablespace undost01;8)查询undo表空间信息

SQL>show parameter undo_tablespace;

4、管理数据文件的各种操作 1)在表空间中新增一个数据文件

SQL>alter tablespace ts_test1 add datafile ‘c:dsk1ta_test111.dbf’ size 50m;2)删除表空间中无数据的数据文件 第一种语法

SQL>alter database datafile ‘c:disk1ts_test1.dbf’ offline;//数据文件脱机 SQL>alter tablespace ts_test1 drop datafile ‘c:disk1ts_test111.dbf’;第二种语法:

SQL>alter database datafile ‘mytb.dbf’ offline drop;3)数据文件自动扩展设置

SQL>alter tablespace ts_test1 datafile ‘c:disk1ts_test1.dbf’ autoextend on next 10m maxsize 500m;4)重置数据文件大小,收回或扩数据文件空间

SQL>alter tablespace ts_test1 datafile ‘c:disk1ts_test1.dbf’ resize 45m;

查询重置数据文件大小后的结果

SQL>col file_name for a30;

SQL>col tablespace_name for a30;

SQL>select file_name,tablespace_name,bytes/(1024*1024)from dba_data_files;5)移动数据文件

有两条语句可以实现对数据文件的移动:

a、alter tablespace tablespace_name rename datafile ‘/path/file_name1’

to ‘/path/file_name_new’;

a这条语句主要适合用户表空间,在执行这条语句时表空间必须脱机才能执行。SQL>alter tablesapace ts_test2 offline;//使表空间ts_test2脱机

SQL>host copy c:disk2ts_test2.dbf c:disk1 //将数据文件拷贝到新的位置

SQL>alter tablespace rename datafile ‘c:disk2ts_test2.dbf’ to ‘c:disk1ts_test1.dbf’;b、alter database db_name rename file ‘/path/file_name1’ to ‘/path/file_name_new’;

这条语句使用于系统表空间及不能置为脱机的表空间中的数据文件。在使用该语句时,数据库必须在加载(mount)的状态且目标数据文件必须存在,因为该语句只是修改文件中指向数据文件的指针(地址)。SQL>shutdown immediate;SQL>host copy c:oracleproduct10.2.0oradatasystem01.dbf c:disk1 SQL>startup mount;SQL>alter database rename file ‘c:oracleproduct10.2.0oradataorclsystem01.dbf’ to ‘c:disk1system01.dbf’;SQL>alter database open;查询移动后的结果

篇3:恢复Oracle表空间的方法

1 基于DBLINK的数据库表空间快速监测方法

1.1 实现思路

通过DBLINK将查询到的各Oracle数据库表空间数据集中汇总到一张表里, 使用crontab执行定时任务从各台服务器获取表空间使用情况信息。选择一台安装有Oracle数据中的tbmonitor实例, 用于存放表空间数据。

1.2 实现步骤

方法具体实现步骤如下:

(1) 收集所有Oracle数据库信息。

以需监控三个Oracle数据库为例:基础数据平台Oracle数据库IP地址10.138.100.2, 实例名jcsjpt;PMS辅助应用Oracle数据库IP地址10.138.100.3, 实例名pms, 运维工具Oracle数据库IP地址10.138.100.4, 实例名sxyth。

(2) 创建表空间监控所需要的表。

连接tsmonitor中数据库, 执行SQL语句:

建立用于保存表空间数据的表tsmonitor。SQL语句:

(3) 建立DBLINK所需要的用户。

在四个Oracle数据库 (10.138.100.1-4) 分别建立DBLINK专用数据库访问用户用于获取数据, SQL语句为:

(4) 在tsmonitor服务器上建立到待监测oracle的tnsnames.ora连接。

在tnsnames.ora文件中加入配置, 连接tsmonitor数据库, 执行SQL语句:

(5) 在tsmonitor中设置dblink。

设置DBLINK后, 就能通过dblink从被监控服务器远程抽取表空间信息。SQL语句为:

(6) 设置crontab定时脚本。

通过crontab e设置定时抽取任务, 如下:

(7) 准备表空间数据插入脚本。

以jcsjpt为例, vim/opt/app/oracle/tbmonitor/jcsjpt.sql, 文件内容为:

(8) 直接使用SQL语句获取表空间数据。

完成上述步骤后可通过SQL语句查看各数据库表空间使用占比, 以jcsjpt为例, vim/opt/app/oracle/tbmonitor/jcsjpt.sql, 文件内容为:

2 结语

本文方法自动收集各Oracle数据表空间使用情况, 降低了运维人员重复工作强度, 实现了Oracle数据库表空间监控小方向的自动化工作, 利用该方法成果也很容易实现dba所需要的表空间数据数据文件数据等信息进行图形化的展示、数据文件变动告警、表空间大小超过阈值告警等实用化运维功能。

摘要:数据库是电力信息系统中的重要基础组件, 也是日常信息运维工作的重点、难点, 其中目前人工定期巡检实现对Oracle数据库表空间的监测, 既费时又费力, 运维效率较低。本文利用DBLINK技术使用定时任务每天将各数据库中表空间利用情况收集到一张表中, 方便运维人员对Oracle数据库表空间的变化情况进行监控, 及时发现表空间不足或者过大造成的安全风险, 具有较好的实用价值。

关键词:Oracle数据库,DBLINK,表空间监控

参考文献

[1]王静雯.Oracle数据库表空间的监控和维护[J].电脑知识与技术, 2006 (11) :23-23.

[2]贾文潇, 刘婷.数据库应用系统的性能分析与优化方法研究[J].电子测试, 2016 (Z1) .

篇4:恢复Oracle表空间的方法

关键词:Oracle;断电;故障;恢复

中图分类号:TM732

数据库顾名思义就是存储数据的地方,它主要是经过Oracle公司研究的产品,其能够对数据进行保存,能够对大的数据量进行存储,方便以后的查阅,通过数据库来实现数据的存储。其数据存储的特点是经济性、高可用性、高可伸缩性以及功能的完善,其存储量非常大,但是在对其建立的数据进行增删改查的时候要经过SQL语句进行,通过SQL语句实现数据库的访问,以及数据库的数据的建立和数据表单的导入。Oracle所建立成的数据系统具有完善的处理能力,而且具有很高的安全保障机制,这使得数据在进行存储的时候其安全性,能够得到很好的保障,本文就相关的数据库的备份以及恢复进行研究,从故障的处理延伸到数据的备份和恢复,方便以后的数据库相关处理。

1 数据库的故障概述

数据库故障产生的原因很多,因此对于数据库的故障处理应该从更多的方面进行,下面将会从三个方面对数据库的故障进行分析,为故障的处理提供分析的依据。

1.1 事务故障分析

当数据库在处理相关事务的时候,由于断电的原因会造成事务处理不能够达到终点,在此过程中会发生事务的中断 ,此时就被称作为事务故障,当发生事务故障的时候,在此过程中出现的事务中断可能已经将部分数据回写到磁盘之中,因此在进行数据恢复的时候,恢复程序可以强行的恢复数据库的数据,但是不能够影响其他的事务运行,使得系统中该事务回到启动之前的状态

1.2 系统故障分析

系统故障的产生主要是由于不明确的原因造成系统中事务的中断,而产生事务的非正常终止,此时在内存中的缓存数据将会发生丢失,但是存储到数据库的数据则会得到保存,这样就会使得数据不会受到影响,当发生故障时,数据库中的事务发生中断,所存储事务结果会放在物理数据库中,为了确保数据的一致需要对数据库中的修改进行清除。

1.3 介质故障分析

介质故障的产生更多则是在系统运行的时候所发生的硬件故障比较多,使得在存储的过程中外存储的数据会发生丢失,或者是造成数据的部分丢失,当故障发生的时候,存储的磁盘上数据会遭到严重的破坏,此时需要对装入的数据引发故障的介质进行数据处理,使得前副本的数据得到恢复,并且要重新开始将事务进行提交,然后再进行数据库的录入。

2 数据恢复技术分析

在Oracle中进行数据恢复,主要是将冗余数据之下重新建立数据库中的数据,进行恢复需要注意两个比较关键性的问题,一是建立冗余数据,二是建立冗余数据进行数据库的恢复,在此过程中主要是对数据进行转储或者登录日志文件,在通常情况下要将数据库系统这两种使用方法进行探讨。

2.1 数据转储进行数据恢复

通常所说的转储主要是指将整个数据库进行转存,通过复制的方式将数据库存储到另外的磁盘或者是将整个磁盘保护起来,进行数据转储主要有两种的转储方式,一种是静态转储,另外一种是动态转储。其中所说的静态转储主要是在处理事务时进行转储的操作,但是在转储的过程中需要用户事务结束之后才能够进行,这样就会使得数据库的可用性降低;另外动态转储主要是指一种并发的发生过程,主要是用户事务以及转储操作的并发进行,在此期间可以允许数据库的修改或者是存取,动态转储能够保证副本中数据的有效性,而且它能够克服静态转储所存在的缺点。当我们进行动态转储的副本故障恢复时,要根据记录下的事务处理数据建立文件,然后根据副本上的日志将数据库恢复到比较正常的现状。

2.2 依据日志进行数据恢复

日志文件主要是用于数据库中的事务处理更新操作的文件,根据日志文件的信息可以对数据库中的故障进行解决,可以进行系统故障的分析,并且可以协助备份的副本解决故障达到恢复的目的。

3 故障恢复策略分析

在进行故障恢复的时候,首先要从事务故障、系统故障以及介质故障进行分析,前两种的故障通过系统修复自动完成,介质故障的恢复主要是重装数据库将重做已完成的事务。当进行系统故障恢复的时候,会要求将数据库的数据达到一致性,此时就要求将事务已经提交的结果要重新写入数据库之中,因此在系统重新启动的时候要对已经提交的事务进行重做,使得所有的数据恢复到一致的状态。对于动态的数据转储还需要日志的文件副本作为基准,将数据库的数据恢复到一致的状态,此时在恢复的过程中需要执行数据库的命令。其格式如下:

[RECOVER[AUTOMAllC][FROM ADRESS] 指的是将从什么地方进行恢复

[{[[STANDBYDATABASE][UNTILCANCEL指的是终止的位置

[UNTIL TIME]时间 按时间进行恢复

[UNTIL CHANGE] 整数 按系统进行修改

[USING BACKUP CONTROLFILE] 使用备份控制文件

[TABLESPACE]表空间 指定表空间

[DATABASE ]‘文件名’ [‘文件名’]-指定数据库文件

[LOGFILE]‘文件名’ 指定进行数据恢复重做地址

[CONTINUE[DEFAULT] 默认继续 默认继续重做日志

[CANCELI] 取消 取消恢复数据库操作

[PARALLEL] 并行句子 并行操作实现恢复

通过代码的执行,对数据库中的数据进行恢复,可以将数据的恢复做到最好,以此来实现数据库中的数据管理,利用SQL语言对数据库中进行命令的操作,通过保障数据库的数据一致性来恢复数据。在进行数据库的数据保护的时候可以对其进行数据的备份处理,因为备份可以为数据的缺失问题解决提供保障。

4 总结语

随着科学技术的发展,对于数据库的管理也愈发重要,当数据管理员发现问题之后才会想起来对数据进行保护的时候,已经会造成损失,因此在进行数据库管理的时候一定要养成数据备份的习惯,还要从根本上对数据的相关恢复技能进行学习,从最基本的数据库数据恢复做起,明确故障处理的方法。

参考文献:

[1]安亚强.Oracle备份与恢复及故障研究[J].内蒙古煤炭经济,2009,(4):37-39.

[2]贾仁昌.Oracle数据库备份与恢复[J].同煤科技,2008,(1):18-19.

3]王红艳,李涛.Oracle数据库紧急故障解决方案[J].电脑知识与技术,2009,5(27):7600-7602.

[4]李桂祥,王放,李刚荣等.基于文件同步的ORACLE数据库备份与恢复方法[J].重庆医学,2009,33(9):1325-1326.

[5]王国明.Oracle数据库的故障恢复机制[J].计算机时代,2011,(11):66-68.

[6]琚玲,赵芳.ORACLE数据库连接配置浅析及故障排除[J].气象科技,2009,37(4):448-451.

篇5:恢复Oracle表空间的方法

create or replace procedure pro_test_pga isbegin  insert into t_test2  select t.*  from t_test t,(select rownum from dual connect by rownum <= 10 )  order by t.object_name;  commit;end pro_test_pga;

当时t_test有2883968行数据,这个过程跑下来各种direct path read temp因为我的pga_aggregate_target只有可怜的194M,其实开始跑这个过程的目的是验证把pga_aggregate_target调小会不会让速度更慢,因为这个数字是我建库的时候用的默认值,结果跑了5455.62秒,心都碎了,我的机器上的数据库是开了归档的,反正硬盘只这么多,他一边产生我一边删,不然空间一没,就停在那了,本来还想来个把pga_aggregate_target设置为10M试试的,但后来想想还是算了,至少这周算了,以后有时间试试,挂一晚就是,

篇6:恢复Oracle表空间的方法

课程名称:大型数据库技术 指导教师:杨艳华

班级:计算12 姓名:

实验成绩:

上机实践日期:2014.12 上机实践时间:2学时 实验项目名称:重做日志文件、表空间管理操作 学号:20 实验项目编号:实验五 组号:

一、实验目的

1、理解重做日志文件的基本概念;

2、掌握重做日志文件组及其成员的添加、移动、删除等操作;

3、掌握归档重做日志的设置;

4、理解表空间的基本概念和分类;

5、掌握永久表空间的创建和管理操作;

6、掌握还原表空间的管理。

二、实验要求

1、完成重做日志文件组及其成员文件的管理操作;

2、完成归档重做日志的设置;

3、完成永久表空间和临时表空间的管理操作;

4、完成还原表空间的管理。

三、实验内容

(1)查看数据库当前重做日志文件组及成员的设置情况,然后,为数据库添加一组重做日志,组内包含两个成员文件,分别为redo4a.log和redo4b.log,大小分别为5MB。

1(2)为上面新添加的那组重做添加一个日志成员,命名为“redo4c-姓名简拼.log”,实现重做日志的多路存储。

(3)把数据库从非归档模式修改为归档模式,之后创造条件让数据库立即归档,并检查归档是否成功

(4)创建永久表空间

 创建一个表空间名为“TB+学号后三位+姓名简拼”  空间的大小为50M  表空间包括两个数据文件:表空间名_01.dbf(30M)和表空间名_02.dbf(20M),大小均不能自动扩展  数据文件均存放在Oracle的安装根目录下  区的分配方式为统一大小,192K  段管理采用自动方式

(5)改变上述永久表空间的可用性

 先将表空间脱机  再进行联机

(6)创建一个4K的非标准块表空间,命名为“tbf+学号后三位+姓名简拼”,数据文件存储在”oradataorcl姓名简拼”目录下,大小为(学号后三位*2)M。

(7)创建一个临时表空间

 名为“TTB+学号后三位+姓名简拼”

 包含一个数据文件:表空间名_01.dbf,大小为(学号后三位*2)M,存储在”oradataorcl姓名简拼”目录下,文件的大小可以自动扩展。 将该临时表空间设置为数据库的默认临时表空间  再将该临时表空间设置为scott用户的默认临时表空间  查询相关的数据字典验证上面的设置。

(8)查看数据库内各个表空间及其类型,以及区管理方式、分配类型和段空间管理方法、表空间的状态。

(9)删除前面创建的非标准块表空间,同时删除表空间的内容和对应的操作系统文件。

(10)创建一个还原表空间,命名为“UNDO+学号后三位+姓名简拼”,其中包含一个数据文件(存储在”oradataorcl姓名简拼”目录下,命名为“表空间名_01.dbf”),大小为200M,设置该表空间的RETENTION_GUARANTEE属性。然后,将它设置为数据库的当前表空间。

(11)为前面创建的永久表空间添加一个数据文件,命名为“表空间名_03.dbf”,该文件初始大小为50M,允许自动扩展,存储在”oradataorcl姓名简拼”目录下。

(12)将永久表空间中初始的两个文件移动到”oradataorcl姓名简拼”目录下。

(13)同时将前面创建的永久表空间和UNDO表空间内的文件进行重命名,把文件名中的“_”去掉。

三、实验小结

1、通过本次实验,我对重做日志文件组及其成员的添加、移动、删除等操作、归档重做日志的设置、表空间的基本概念和分类、永久表空间的创建和管理操作、还原表空间的管理都有了更为深入的了解和掌握;

2、切换数据库状态前,必须关闭数据库,由于没有关闭数据库,导致在数据库状态切换过程中遇到了很多问题;

篇7:恢复Oracle表空间的方法

在上一篇文章(RMAN备份与恢复之可脱机数据文件丢失)中,我们讲到可脱机数据文件丢失怎么处理,这篇文章我们讲解UNDO表空间丢失的解决办法,

UNDO表空间用于存放UNDO数据,当执行DML操作(INSERT、UPDATE、DELETE)的时候,ORACLE会将这些操作的旧数据写入到UNDO段。UNDO数据也称为回滚数据,用于确保数据的一致性。作用包括:回退事、读一致性、事务恢复、闪回查询。9i开始,管理UNDO数据可以使用UNDO表空间,也可以使用回滚段。10g开始,ORACLE已经放弃使用回滚段。提到UNDO表空间,不得不提UNDO段。UNDO Segment分为两个部分,一个是UNDO Segment Head,还有一个是UNDO Segment Block(也称为事务槽)。UNDO Segment Head中包含了这个回滚段的事务信息,而且有一个指针指向Undo Segment Block。UNDO表空间是非常重要的,如果丢失,会出现无法对数据进行更新。平时的数据库管理中应该注意UNDO表空间的空间是否足够,采用自动扩展还是限制大小,undo_retention值的设定等等。

篇8:恢复Oracle表空间的方法

1.1日志错误排除。数据库出现故障的第一步是检查alert日志,定位故障类型。alert日志中陆续出现ORA-08102和ORA-00600错误,这两个错误都跟表的索引错误有关,即表中的数据与索引不一致造成数据不能访问。索引错误的解决方法是,对索引进行重建,对于无法重建索引的数据表只能将数据导出,将原表truncate掉,然后将数据导回来。

1.2SMON进程。在经过以上错误修复后,alert日志中已经不再报错,但UNDO还在增长。打开v$transaction视图,发现一个进程事务执行时间长达若干小时,不断的吞噬UNDO表空间。进一步检查发现这个进程是Oracle的后台进程SMON。使用alter session试图杀掉SMON执行事务的会话,没有反应。考虑到数据库的安全,没有在操作系统杀掉该会话对应的进程,这样可能造成灾难,只好重启数据库。使用shutdown immediate后数据库挂起而无法关闭,使用shutdown abort强制关闭。重启后库正常打开,UNDO表空间占用没有减少。重启后事务没有了,SMON却在积极地进行死事务恢复。查询死事务恢复后得知预计恢复时间要若干小时,要恢复的块数量与SMON在关闭数据库之前的事务占用块数相当,可见SMON在恢复它自己在关闭数据库前的事务。

在若干小时后,SMON完成了事务恢复,释放了UNDO空间。但很快SMON又开始了持续事务。使用如下语句试图关闭SMON的并行恢复:

alter system set fast_start_parallel_rollback=false;

这个参数设置后需要重启,同样shutdown immediate 挂起,强制关闭数据库。重启后情况依旧。查询了系统现在的锁状态,发现表SYS.smon_scn_time表被锁住,感觉这张表有可疑。根据oracle官方的说明,这是一张记录SCN(System Change Number)到系统时间的映射表。查询表中的最大时间与出现UNDO持续增长的时间一致,基本锁定是这张表造成的。

使用systemstate dump工具,看到SMON试图往这张表中插入数据。怀疑这张表也是索引有问题,分析表smon_scn_time时报错,因为它已经被锁住。使用以下语句设置暂时停止SMON对该表的更新。

alter system set events '12500 trace name context forever,level 10';

因为当前事务无法中止,重启数据库才能成效。

重启数据库后重新分析smon_scn_time,可以分析,但报告索引错误。尝试重建索引时挂起。考虑到该表数据可以安全删除,直接truncate。

然后使用如下语句恢复SMON的对该表的更新。

alter system set events '12500 trace name context off';

隔段时间后再查询该表,发现该表中的时间以大概5分钟间隔在更新。经过一段时间的跟踪,发现UNDO表空间不再增长。在SMON进行死事务恢复完成后,UNDO表空间缩小到1G以内。后面在数据库正常操作时UNDO大约在300-400M,至此问题解决。

二、结束语

从此次故障恢复的情况来看,在磁盘阵列掉了后很多表的索引出现错误,有的表还出现了具有相同主键的数据。回顾处理过程,最开始应该从v$transaction视图入手,查到SMON进程在执行事务,应该再进一步查它在执行什么语句以及操作哪张表,这样定位故障会更准确、迅速。

参考文献

[1]谷长勇,王彬,陈杰,等.Oracle 11g权威指南[M].北京:电子工业出版社,2008.

上一篇:商场服务台工作计划下一篇:七年级语文第六单元