--=============================
-- SYSTEM 表空间管理及备份恢复
--=============================
SYSTEM表空间是Oracle数据库最重要的一个表空间,存放了一些DDL语言产生的信息以及PL/SQL包、视图、函数、过程等,称之为数据字典,
因此该表空间也具有其特殊性,下面描述SYSTEM表空间的相关特性及备份与恢复。
一、SYSTEM表空间的管理
1.建议不存放用户数据,避免用户错误导致系统表空间不可用
应当为系统设定缺省的默认表空间来避免用户创建时使用系统表空间
ALTER DATABASE DEFAULT TABLESPACE tablespace_name
SQL> col property_value format a30
SQL> select property_name,property_value from database_properties
2 where property_name like 'DEFAULT%';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ ------------------------------
DEFAULT_TEMP_TABLESPACE TEMP
DEFAULT_PERMANENT_TABLESPACE USERS --此处应当为非SYSTEM表空间
DEFAULT_TBS_TYPE SMALLFILE
2.SYSTEM表空间特性
不能脱机offline
不能置为只读read only
不能重命名
不能删除
--演示不能脱机
SQL> alter tablespace system offline;
alter tablespace system offline
*
ERROR at line 1:
ORA-01541: system tablespace cannot be brought offline; shut down if necessary
SQL> alter database datafile 1 offline;
alter database datafile 1 offline
*
ERROR at line 1:
ORA-01541: system tablespace cannot be brought offline; shut down if necessary
--不能置为只读状态
SQL> alter tablespace system read only;
alter tablespace system read only
*
ERROR at line 1:
ORA-01643: system tablespace can not be made read only
--不能重命名
SQL> alter tablespace system rename to system2;
alter tablespace system rename to system2
*
ERROR at line 1:
ORA-00712: cannot rename system tablespace
--不能删除
SQL> drop tablespace system;
drop tablespace system
*
ERROR at line 1:
ORA-01550: cannot drop system tablespace
SQL> drop tablespace system including contents and datafiles;
drop tablespace system including contents and datafiles
*
ERROR at line 1:
ORA-01550: cannot drop system tablespac
总结:system表空间就一句话,普通表空间所具有的更名、删除、只读、脱机不为system表空间所拥有
3.空间管理
保证空间可用,一般存放单个数据文件。设置为自动扩展
如果SYSTEM表空间数据文件很大,可以考虑使用bigfile
使用下面的视图来获取表空间的相关状态,使用空间等等
dba_data_files
dba_tablespaces
dba_free_space
v$datafiles
v$tablespace
--查看表空间的大小及已用大小
SQL> select tablespace_name,bytes/1024/1024 cur_size,user_bytes/1024/1024 as user_bytes,status,online_status
2 from dba_data_files;
TABLESPACE_NAME CUR_SIZE USER_BYTES STATUS ONLINE_
------------------------------ ---------- ---------- --------- -------
USERS 5 4.9375 AVAILABLE ONLINE
SYSAUX 250 249.9375 AVAILABLE ONLINE
UNDOTBS1 35 34.9375 AVAILABLE ONLINE
SYSTEM 500 499.9375 AVAILABLE SYSTEM
EXAMPLE 100 99.9375 AVAILABLE ONLINE
--查看表空间的剩余空间
SQL> select tablespace_name,sum(bytes/1024/1024)
2 from dba_free_space group by tablespace_name;
TABLESPACE_NAME SUM(BYTES/1024/1024)
------------------------------ --------------------
UNDOTBS1 11.6875
SYSAUX 2.125
USERS 2
SYSTEM 10.125
EXAMPLE 31.75
--查看已用空间的百分比
select a.tablespace_name, round((sizea-sizeb),2) as used_space, round(sizeb,2) ||' MB' as free_space,
round((sizea-sizeb)/sizea*100,2) ||'%' as used_percent
from
(select tablespace_name,bytes/1024/1024 sizea from dba_data_files) a
inner join
(select tablespace_name,sum(bytes/1024/1024) sizeb
from dba_free_space group by tablespace_name) b
on a.tablespace_name = b.tablespace_name
order by a.tablespace_name;
二、SYSTEM表空间的冷备与恢复
关于数据库的冷备份请参考: Oracle 冷备份
关于如何切换归档模式请参考:Oracle 归档日志
因仅仅涉及SYSTEM表空间的备份与恢复,在此仅仅备份SYSTEM表空间
1.非归档模式下的备份与恢复
--查看归档模式
SQL> select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG
--关闭数据库后备份system01.dbf文件到指定备份目录
SQL> shutdown immediate;
SQL> ho cp $ORACLE_BASE/oradata/orcl/system01.dbf $ORACLE_BASE/coolbak/
--基于非系统表空间创建表tb
SQL> startup
SQL> create table tb tablespace users as select * from scott.emp;
SQL> select count(1) from tb;
COUNT(1)
----------
14
--多次切换日志直到日志组被清空
SQL> alter system switch logfile;
--删除system01.dbf文件
SQL> ho rm $ORACLE_BASE/oradata/orcl/system01.dbf
--强制启动后出现错误提示
SQL> startup force;
ORACLE instance started.
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
--还原system表空间的数据文件
SQL> ho cp $ORACLE_BASE/coolbak/system01.dbf $ORACLE_BASE/oradata/orcl/
--基于放弃的恢复system01.dbf
SQL> recover database until cancel;
ORA-00279: change 677850 generated at 08/15/2010 14:00:36 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2010_08_15/o1_mf_1_10_%u_.arc
ORA-00280: change 677850 for thread 1 is in sequence #10
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel --系统提示成功恢复需要使用RESETLOGS打开数据库
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 2 needs more recovery to be consistent--提示数据文件需要执行一致性恢复,有些数据在undo表空间丢失
ORA-01110: data file 2: '/u01/app/oracle/oradata/orcl/undotbs01.dbf'
ORA-01112: media recovery not started
--由于没有备份datafile 2,因此启用隐藏参数_allow_resetlogs_corruption
SQL> alter system set "_allow_resetlogs_corruption" = true scope = spfile; --此参数为静态参数,需要设置scope
SQL> startup force;
ORACLE instance started.
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
--使用resetlogs打开数据库时系统异常终止
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
SQL> exit; --退出
--重新登录后可以正常启动
[oracle@robinson ~]$ sqlplus / as sysdba
SQL> startup
ORACLE instance started.
Database mounted.
Database opened.
--关闭隐藏参数_allow_resetlogs_corruption
SQL> alter system reset "_allow_resetlogs_corruption" scope =spfile sid ='*';
--提交的事务因日志被清空,数据丢失
SQL> select count(1) from tb;
select count(1) from tb
*
ERROR at line 1:
ORA-00942: table or view does not exist
2.归档模式下的备份与恢复
--获得system表空间的路径后一致性关闭数据库并复制system表空间数据文件到备份路径
SQL> col name format a55
SQL> select name from v$datafile where file# = 1;
NAME
-------------------------------------------------------
/u01/app/oracle/oradata/orcl/system01.dbf
SQL> shutdown immediate;
SQL> ho cp $ORACLE_BASE/oradata/orcl/system01.dbf $ORACLE_BASE/coolbak/
--查看日志归档模式
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
--删除system01.dbf
SQL> ho rm $ORACLE_BASE/oradata/orcl/system01.dbf;
--system01.dbf文件丢失后,下面可以查询users表空间的数据
SQL> select count(1) from scott.emp;
COUNT(1)
----------
14
--基于system表空间创建表并插入数据,提示system表空间的数据文件丢失,无法创建该表
SQL> create table tb_test tablespace system as select * from dba_segments ;
create table tb_test as select * from dba_segments
*
ERROR at line 1:
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
--可以基于非system表创建对象,如下在users表空间创建表tb_test
SQL> create table tb_test tablespace users as select * from scott.emp;
SQL> select count(1) from tb_test;
COUNT(1)
----------
14
--下面给帐户解锁时收到system01.dbf丢失的错误,因为帐户信息存储在system表空间
SQL> alter user hr account unlock;
alter user hr account unlock
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 2
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
--开启另外一个会话,可以连接,但出现以下错误提示
SQL> conn scott/tiger;
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
--无法一致性关闭数据库
SQL> shutdown immediate;
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
SQL> shutdown abort; --强制关闭数据库
ORACLE instance shut down.
--还原system表空间的数据文件
SQL> ho cp $ORACLE_BASE/coolbak/system01.dbf $ORACLE_BASE/oradata/orcl/
--恢复system表空间的数据文件
SQL> recover datafile 1;
Media recovery complete.
SQL> alter database open;
--由于日志没有丢失,因此已提交的事务保持一致性
SQL> select count(1) from tb_test;
COUNT(1)
----------
14
总结:
a.非归档模式下,由于联机重做日志的循环使用规则,一些已经写入日志但尚未及时更到数据文件的数据信息在故障发生后将丢失
因此仅仅能恢复到表空间(此处为system表空间)备份的时刻,而归档模式下可以恢复到指定或最新时刻
b.当system表空间丢失后,涉及到system表空间的数据字典将不可用,也不可在system表空间添加对象
c.使用了resetlogs重置了日志文件,建议一致性关闭数据库后,立即全备数据库
三、SYSTEM表空间的热备与恢复
由于非归档模式容易造成数据的丢失,而且生产数据库一般采用归档模式,因此在此不再考虑非归档模式下的备份与恢复处理
--查看日志归档模式
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
--在session1中开始system表空间的热备模式
SQL> alter tablespace system begin backup;
--在session2中创建表tb_seg
SQL> show user;
USER is "LION"
SQL> create table tb_seg tablespace users as select * from dba_segments;
--在session1中进行热备到指定路径
SQL> ho cp $ORACLE_BASE/oradata/orcl/system01.dbf $ORACLE_BASE/hotbak/
--在session2中清空刚刚创建的tb_seg表
SQL> delete from tb_seg;
SQL> commit;
--在session1中关闭热备模式,并删除system01.dbf
SQL> alter tablespace system end backup;
SQL> ho rm $ORACLE_BASE/oradata/orcl/system01.dbf
--在session2中继续会话并执行下列操作
SQL> insert into tb_seg select * from dba_segments where rownum<6;
SQL> commit;
SQL> select count(1) from tb_seg;
COUNT(1)
----------
5
--强制启动数据
SQL> startup force;
ORACLE instance started.
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u01/oracle/oradata/orcl/system01.dbf'
--还原system表空间的数据文件
SQL> ho cp $ORACLE_BASE/hotbak/system01.dbf $ORACLE_BASE/oradata/orcl/
--执行介质恢复
SQL> recover datafile 1;
Media recovery complete.
SQL> alter database open ;
--验证恢复,表tb_seg的数据正确
SQL> select count(1) from lion.tb_seg;
COUNT(1)
----------
5
四、基于RMAN,SYSTEM表空间的备份与恢复
1.在使用RMAN备份表空间,数据文件时,逻辑上等同于使用Oracle的热备份,只不过RMAN是将表空间、数据文件进行打包封装到一个备
份集多个备份片之中。事实上,在备份system表空间与备份普通表空间是一样的,但使用RMAN备份system表空间时,RMAN会自动备份控制文件
以及spfile文件。RMAN使用backup datafile 1(backup database)一条命令来代替将表空间置于热备以及手动复制文件的过程
2.对于RMAN下system表空间的还原与恢复,与冷备,热备模式所不同的是,还原时并不需要实现手工拷贝备份文件至原始位置,一旦
发布restore指令,RMAN会自动寻找该表空间最新备份的数据,并完成还原操作。其次使用recover指令来完成介质恢复。
3.如上描述,使用RMAN备份system表空间与热备模式大同小异,故不再演示,请参考下面给出的相关链接。
五、更多参考
有关基于用户管理的备份和备份恢复的概念请参考:
Oracle 冷备份
Oracle 热备份
Oracle 备份恢复概念
Oracle 实例恢复
Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理)
有关RMAN的恢复与管理请参考:
RMAN 概述及其体系结构
RMAN 配置、监控与管理
RMAN 备份详解
RMAN 还原与恢复
有关Oracle体系结构请参考:
Oracle 实例和Oracle数据库(Oracle体系结构)
Oracle 表空间与数据文件
Oracle 密码文件
Oracle 参数文件
Oracle 数据库实例启动关闭过程
Oracle 联机重做日志文件(ONLINE LOG FILE)
Oracle 控制文件(CONTROLFILE)
Oracle 归档日志
分享到:
相关推荐
### SYSAUX表空间管理及恢复 #### 一、SYSAUX表空间的引入与作用 自Oracle 10g版本起,为了更好地管理和优化数据库性能,SYSAUX表空间作为一个全新的概念被引入。它的主要目的是为了减轻SYSTEM表空间的压力,并...
本文将详细介绍如何在`SYSTEM`表空间数据文件丢失的情况下,使用`RMAN`进行恢复。 首先,确保有有效的`RMAN`备份至关重要。这包括全量数据库备份以及归档日志备份。在示例中,数据库被备份到`/u01/app/oracle/...
Oracle数据库的表空间备份与恢复是数据库管理员(DBA)日常工作中至关重要的环节,它涉及到数据的安全性和业务连续性。在Oracle环境中,表空间是存储数据的主要单位,因此对其执行有效的备份和恢复策略至关重要。 ...
### 非归档模式下System表空间损坏的数据库恢复 #### 一、问题背景与概述 在数据库管理过程中,可能会遇到系统表空间(System TableSpace)损坏的情况,尤其是在数据库处于非归档模式(NOARCHIVELOG mode)时,...
本文旨在为瑞航公司当前所使用的Oracle RMAN备份恢复机制提供详尽的指导,涵盖全量备份、增量备份、数据恢复等多个方面,尤其关注于数据丢失、控制文件丢失、参数文件丢失、密码文件丢失、redo文件丢失以及表空间...
非SYSTEM表空间则是用户自定义的,可以用来存放用户数据、索引、回滚段和临时段,这样做的好处是可以提高备份和恢复的效率,更好地管理空间,以及将静态和动态数据分离。 建立表空间是数据库管理员的重要任务。常见...
通过 Symantec System Recovery Management Solution 或 Symantec System Recovery Monitor Solution(免费提供)集中管理整个企业内多台服务器的备份和恢复任务,从而简化 IT 管理 采用集成式数据精简技术,降低...
Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统,它提供了强大的数据管理能力和高可用性方案,以及性能优化和备份恢复策略。本资料主要聚焦在Oracle数据库的进阶主题,包括高可用性、性能优化和备份...
本文将围绕"Oracle命令大全及关于Oracle 1000问"的主题,深入讲解日志管理、表空间管理、表操作和索引管理等关键知识点。 首先,日志管理在Oracle数据库中至关重要,因为它是数据恢复的基础。主要涉及Redo Logs和...
控制用户所占用的表空间分配,通过将不同表的数据、分区表中不同分区的数据放置到不同的表空间(或其中的数据文件)中,可以提高数据库的 I/O 性能,并有利于进行部分备份和恢复等管理工作。 Oracle 表空间可以...
- **案例7**:实现表空间级别的备份与恢复。 - **案例8**:在多节点环境中协调备份与恢复活动。 以上知识点概括了从备份与恢复的基础理论到具体实施案例,涵盖了Oracle备份与恢复的主要方面。这些知识对于DBA...
本文将详细介绍Oracle 9i环境下UNDO表空间数据文件丢失后的恢复步骤及注意事项。 #### 二、准备工作 1. **登录到Oracle数据库**: - 使用命令`sqlplus /nolog`以非登录方式打开SQL*Plus。 - 输入`connect / as ...
表空间的主要作用包括控制数据库占用的磁盘空间、管理用户表空间配额、优化I/O性能、设置只读表空间以保护静态数据,以及作为备份和恢复的单位。表空间可以分为系统表空间和非系统表空间,系统表空间如SYSTEM和...
* 支持导入时重新映射功能(即将对象导入到新的目标数据文件、架构及表空间等)。 * 支持元数据压缩及数据采样。 备份实施需求 一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以 system 等管理员创建...
### Oracle数据库创建表空间、建立用户、授权及备份恢复详解 #### 一、创建与管理表空间 在Oracle数据库中,表空间是物理空间分配的基本单位。为了有效地管理和使用存储资源,合理地创建和配置表空间是非常重要的...
- `SYSTEM`表空间是Oracle数据库的默认表空间,示例中对其默认存储参数进行了调整,以优化空间管理。 - `RBS`(Rollback Segments)表空间用于存储回滚段,它保存了事务撤销的信息。 - `TEMP`表空间用于临时数据...
- 它们不仅控制数据库占用的磁盘空间,还管理用户表空间配额,通过数据流向管理提高I/O性能,并作为备份和恢复的操作单位。 - 表空间分为系统表空间和非系统表空间,前者如SYSTEM和SYSAUX,存储Oracle的核心系统...
8. **备份与恢复策略**:考虑表空间的备份策略,确保在空间问题发生时能够快速恢复。 通过以上这些方法,可以有效地管理和优化Oracle数据库的表空间,从而保持数据库的高效运行。在实际操作中,应根据具体的业务...