您的位置:首页 > 其它

数据文件管理

2015-03-30 00:02 148 查看
数据文件分2个方向管理:

物理结构和逻辑结构。

数据库的存储层次结构图:

.............

逻辑结构: 物理结构:

......................

表空间类型:system、sysaux、temp、undo、index、其他

创建表空间:

语法:create tablespace <name>

datafile '<dir>' size N[k|m|g|t];

创建表空间时我们需呀考虑几个问题:

1)具有create tablespace权限

2)smallfile和bigfile(T级以上:可以减少数据问文件个数,方便管理):如果系统默认是存放smallfile,则创建表空间create tablespace相当于cteate smallfile tablespace;如果系统默认是存放bigfile,则创建表空间create tablespace相当于cteate bigfile tablespace;

如何查看系统默认创建表空间是smallfile还是bigfile文件,可以通过查询database_properties来查看,如下:可知现系统默认创建为smallfile表空间文件。

SQL> desc database_properties

?? ????? ??

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

PROPERTY_NAME NOT NULL VARCHAR2(30)

PROPERTY_VALUE VARCHAR2(4000)

DESCRIPTION VARCHAR2(4000)

SQL> col PROPERTY_NAME for a10;

SQL> col PROPERTY_value for a20;

SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where property_name like '%TBS%';

PROPERTY_NAME PROPERTY_VALUE

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

DEFAULT_TBS_TYPE SMALLFILE

如果想修改系统默认创建表空间为bigfile文件,操作如下:

SQL> alter database set default bigfile tablespace;

Database alterd.

SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where property_name like '%TBS%';

PROPERTY_NAME PROPERTY_VALUE

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

DEFAULT_TBS_TYPE BIGFILE

3)IO是否够用。

表空间管理方式(区管理方式):

1)字典管理:已淘汰:extent management dictionary

2)本地管理:9i后(默认):extent management local

8i—>10g的数据迁移需要研究?

查看本地管理方式:dba_tablespace

SQL> select tablespace_name,EXTENT_MANAGEMENT from dba_tablespaces;

TABLESPACE_NAME EXTENT_MAN

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

SYSTEM LOCAL

UNDOTBS1 LOCAL

SYSAUX LOCAL

TEMP LOCAL

USERS LOCAL

表空间状态:1)offline、2)online3)read only4)read write

默认情况下表空间状态为online和read write:

SQL> select file#,status,enabled from v$datafile;

FILE# STATUS ENABLED

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

1 SYSTEM READ WRITE

2 ONLINE READ WRITE

3 ONLINE READ WRITE

4 ONLINE READ WRITE

SQL> select b.tablespace_name,a.file#,a.status,a.enabled from v$datafile a,dba_data_files b where a.file#=b.file_id;

TABLESPACE_NAME FILE# STATUS ENABLED

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

SYSTEM 1 SYSTEM READ WRITE

UNDOTBS1 2 ONLINE READ WRITE

SYSAUX 3 ONLINE READ WRITE

USERS 4 ONLINE READ WRITE

修改表空间状态:

SQL> alter tablespace users read only;

SQL> alter tablespace users read write;

SQL> alter tablespace users offline;

???????

SQL> alter tablespace users online;

???????

Tablespace

Online

Offline

System

必须online

必须read write

Sysaux

可以offline

不能read only

Undo

不能offline

不能read only

表空间的重命名:alter tablespace <ole_tablespace_name> rename to <new_tablespace_name>;

systemsysaux不能改名

undotemp表空间可以改名但是同时要把参数文件改了,不建议改。

users表空间可以改名

其他自定义表空间可以根据自己要求改名。

SQL> create tablespace fi datafile '/u01/oracle/oradata/orcl/fi.dbf' size 10m;

???????

SQL> alter tablespace fi rename to f1;

???????

表空间大小管理:

1)表空间自动扩张:

可以通过dba_data_files表的AUTOEXTENSIBLE字段查询表空间文件是否为自动扩张。

SQL> select tablespace_name,file_name,AUTOEXTENSIBLE from dba_data_files;

TABLESPACE FILE_NAME AUT

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

SYSTEM /u01/oracle/oradata/rezin/system01.dbf YES

UNDOTBS1 /u01/oracle/oradata/rezin/undotbs01.dbf YES

SYSAUX /u01/oracle/oradata/rezin/sysaux01.dbf YES

USERS /u01/oracle/oradata/rezin/users01.dbf YES

F1 /u01/oracle/oradata/orcl/fi.dbf NO

通过以上查询可知,只有F1表空间为非自动扩张状态,将其改为自动扩张表空间:

语法:SQL> alter database <路径>|<编号> autoextend on next nM maxsize Ng|t;

SQL> alter database datafile '/u01/oracle/oradata/orcl/fi.dbf' autoextend on;

SQL> select tablespace_name,file_name,AUTOEXTENSIBLE from dba_data_files;

TABLESPACE FILE_NAME AUT

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

SYSTEM /u01/oracle/oradata/rezin/system01.dbf YES

UNDOTBS1 /u01/oracle/oradata/rezin/undotbs01.dbf YES

SYSAUX /u01/oracle/oradata/rezin/sysaux01.dbf YES

USERS /u01/oracle/oradata/rezin/users01.dbf YES

F1 /u01/oracle/oradata/orcl/fi.dbf YES

2)手工resize数据文件大小

SQL> alter database datafile '/u01/oracle/oradata/orcl/fi.dbf' autoextend off;

SQL> alter database datafile '/u01/oracle/oradata/orcl/fi.dbf' resize 100m;

???????

3)添加数据文件(打开自动扩张)

SQL> alter tablespace f1 add datafile '/u01/oracle/oradata/orcl/f2.dbf' size 10m autoextend on next 10m maxsize 100m;

表空间数据文件的重命名和重定位:

条件:数据库在mount阶段或open阶段,归档模式,数据文件必须可以offline状态,如果数据文件不能offline,只能在mount状态重命名。

步骤:1)将要改名的表空间数据文件offline

2)操作系统级别移动数据文件(改名)

3)执行从命名命令

SQL> alter database rename file '<oldname>' to '<newname>';

4)将数据文件状态改为online状态。

SQL> alter tablespace f1 offline;

???????

SQL> ho cp /u01/oracle/oradata/orcl/f2.dbf /u01/oracle/oradata/orcl/f1.dbf

SQL> alter database rename file '/u01/oracle/oradata/orcl/f2.dbf'

to '/u01/oracle/oradata/orcl/f1.dbf';

???????

SQL> alter tablespace f1 online;

???????

删除表空间:

语法:drop tablespace <name> including contents and datafiles;

SQL> drop tablespace f1;

重新创建表空间:

SQL> create tablespace f2 datafile '/u01/oracle/oradata/orcl/f1.dbf' reuse;

???????

SQL> drop tablespace f2 including contents and datafiles;

???????

获取表空间和数据文件信息(数据文件相关视图):

表空间信息:

dba_tablespace

v$tablespace

数据文件信息:

dba_data_files

v$datafile

临时数据文件信息:

dba_temp_files

v$tempfile

系统表空间:

字典所在,定义信息,一般不放用户数据

1)空间管理:一般放单个文件最好,看磁盘空间是否够用等

2)备份:归档模式备份,非归档模式只能冷备。

热备:A)alter tablespace system begin backup;

B)$cp '<system dir>' /bak

C)alter tablespace system end backup;

rman备份:back tablespace system;

[oracle@localhost ~]$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Mar 18 09:31:40 2015

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

connected to target database: REZIN (DBID=633392282)

RMAN> backup tablespace system;

3)system异常处理:

A非归档、无备份-->不能恢复

无法恢复

B归档、有备份、日志完整--->可以恢复

热备文件恢复:

SQL> startup

ORACLE instance started.

Total System Global Area 285212672 bytes

Fixed Size 1218968 bytes

Variable Size 96470632 bytes

Database Buffers 180355072 bytes

Redo Buffers 7168000 bytes

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'

SQL> ho ls /u01/oracle/oradata/orcl/system01.dbf

ls: /u01/oracle/oradata/orcl/system01.dbf: 没有那个文件或目录

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-01113: file 1 needs media recovery

ORA-01110: data file 1: '/u01/oracle/oradata/orcl/system01.dbf'

SQL> recover database;

Media recovery complete.

SQL> alter database open;

Database altered.

rman恢复:

RMAN> list backup;

RMAN> restore tablespace system;

Starting restore at 19-MAR-15

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=155 devtype=DISK

channel ORA_DISK_1: starting datafile backupset restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

restoring datafile 00001 to /u01/oracle/oradata/orcl/system01.dbf

channel ORA_DISK_1: reading from backup piece /u01/oracle/flash_recovery_area/ORCL/backupset/2015_03_19/o1_mf_nnndf_TAG20150319T175033_bjo6zc4b_.bkp

channel ORA_DISK_1: restored backup piece 1

piece handle=/u01/oracle/flash_recovery_area/ORCL/backupset/2015_03_19/o1_mf_nnndf_TAG20150319T175033_bjo6zc4b_.bkp tag=TAG20150319T175033

channel ORA_DISK_1: restore complete, elapsed time: 00:00:35

Finished restore at 19-MAR-15

RMAN> recover tablespace system;

Starting recover at 19-MAR-15

using channel ORA_DISK_1

starting media recovery

media recovery complete, elapsed time: 00:00:05

Finished recover at 19-MAR-15

RMAN> sql 'alter database open';

sql statement: alter database open

RMAN>

C归档、有备份、日志不完整--->可以恢复,但不保证数据丢失

4、system表空间不能offline,不能read only,不能改名

sysaux表空间

作用:存储一些默认的工具,程序,减轻system负担,尤其IO负担。

sysaux表空间名字不能更改,不能drop,不能read only,能够offline

查询sysaux表空间下有哪些工具:

SQL> desc v$sysaux_occupants

Name Null? Type

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

OCCUPANT_NAME VARCHAR2(64)

OCCUPANT_DESC VARCHAR2(64)

SCHEMA_NAME VARCHAR2(64)

MOVE_PROCEDURE VARCHAR2(64)

MOVE_PROCEDURE_DESC VARCHAR2(64)

SPACE_USAGE_KBYTES NUMBER

SQL> col OCCUPANT_NAME for a20;

SQL> col SCHEMA_NAME for a20;

SQL> select OCCUPANT_NAME, SCHEMA_NAME from v$sysaux_occupants;

OCCUPANT_NAME SCHEMA_NAME

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

LOGMNR SYSTEM

LOGSTDBY SYSTEM

STREAMS SYS

XDB XDB

AO SYS

XSOQHIST SYS

XSAMD OLAPSYS

SM/AWR SYS

SM/ADVISOR SYS

SM/OPTSTAT SYS

SM/OTHER SYS

STATSPACK PERFSTAT

ODM DMSYS

SDO MDSYS

WM WMSYS

ORDIM ORDSYS

ORDIM/PLUGINS ORDPLUGINS

ORDIM/SQLMM SI_INFORMTN_SCHEMA

EM SYSMAN

TEXT CTXSYS

ULTRASEARCH WKSYS

ULTRASEARCH_DEMO_USE WK_TEST

EXPRESSION_FILTER EXFSYS

EM_MONITORING_USER DBSNMP

TSM TSMSYS

JOB_SCHEDULER SYS

26 rows selected.

备份:归档(非归档只能冷备,无大意义)可以热备也可以rman备份。

热备:A)alter tablespace sysaux begin backup;

B)$cp '<system dir>' /bak

C)alter tablespace sysaux end backup;

rman备份:back tablespace sysaux;

[oracle@localhost ~]$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Mar 18 09:31:40 2015

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

connected to target database: REZIN (DBID=633392282)

RMAN> back tablespace sysaux;

sysaux表空间的异常处理:

1)有备份--->还原,恢复

使用热备文件恢复:

SQL> startup

ORACLE instance started.

Total System Global Area 285212672 bytes

Fixed Size 1218968 bytes

Variable Size 79693416 bytes

Database Buffers 197132288 bytes

Redo Buffers 7168000 bytes

Database mounted.

ORA-01157: cannot identify/lock data file 3 - see DBWR trace file

ORA-01110: data file 3: '/u01/oracle/oradata/orcl/sysaux01.dbf'

SQL> ho cp /u01/oracle/sysaux01.dbf /u01/oracle/oradata/orcl/sysaux01.dbf

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-01113: file 3 needs media recovery

ORA-01110: data file 3: '/u01/oracle/oradata/orcl/sysaux01.dbf'

SQL> recover database;

Media recovery complete.

SQL> alter database open;

Database altered.

rman备份恢复:

[oracle@localhost ~]$ rman target /

RMAN> list backup;

RMAN> restore tablespace sysaux;

Starting restore at 20-MAR-15

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=155 devtype=DISK

channel ORA_DISK_1: starting datafile backupset restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

restoring datafile 00003 to /u01/oracle/oradata/orcl/sysaux01.dbf

channel ORA_DISK_1: reading from backup piece /u01/oracle/flash_recovery_area/ORCL/backupset/2015_03_20/o1_mf_nnndf_TAG20150320T054421_bjpjsot8_.bkp

channel ORA_DISK_1: restored backup piece 1

piece handle=/u01/oracle/flash_recovery_area/ORCL/backupset/2015_03_20/o1_mf_nnndf_TAG20150320T054421_bjpjsot8_.bkp tag=TAG20150320T054421

channel ORA_DISK_1: restore complete, elapsed time: 00:00:16

Finished restore at 20-MAR-15

RMAN> recover tablespace sysaux;

Starting recover at 20-MAR-15

using channel ORA_DISK_1

starting media recovery

media recovery complete, elapsed time: 00:00:02

Finished recover at 20-MAR-15

RMAN> sql 'alter database open';

sql statement: alter database open

RMAN>

2)无备份--->offline sysaux表空间,然后迁移数据,再重新建库,将数据迁移回来。

无备份下sysaux表空间损坏如何打开数据库:

undo表空间管理:

undo表空间作用:回滚(没有提交),前滚(已提交,但没有写入数据文件)

1)事务的回退:rollback

2)事务的恢复:撤销没有提交的内容

3)读一致性:事务只能查询自己修改过的内容或是原来的内容(锁的作用)。

4)闪回数据:查询3600面之前的数据

undo表空间管理模式/undo表空间参数:自动/手动,由undo_management参数决定undo表空间管理模式。

查询undo表空间管理模式:

SQL> show parameter undo_m

NAME TYPE VALUE

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

undo_management string AUTO

查询系统使用的默认undo表空间:

SQL> show parameter undo_t

NAME TYPE VALUE

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

undo_tablespace string UNDOTBS1

undo表空间段类型:

1)系统段:存放系统表空间产生的镜像数据。

2)非系统段:存放非系统表空间产生的镜像数据。

3)临时段:能够offline的表空间产生,记录offline阶段oracle数据库产生的数据。

查询如下视图:查寻系统段和非系统段通过v$rollname

SQL> select * from v$rollname;

USN NAME

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

0 SYSTEM

1 _SYSSMU1$

2 _SYSSMU2$

3 _SYSSMU3$

4 _SYSSMU4$

5 _SYSSMU5$

6 _SYSSMU6$

7 _SYSSMU7$

8 _SYSSMU8$

9 _SYSSMU9$

10 _SYSSMU10$

11 rows selected.

查询临时段通过dba_segments:

SQL> ALTER tablespace users offline;

Tablespace altered.

SQL> col SEGMENT_NAME for a20;

SQL> col SEGMENT_TYPE for a20;

SQL> select segment_name,segment_type from dba_segments where segment_type like '%DEF%';

SEGMENT_NAME SEGMENT_TYPE

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

1.60881 DEFERRED ROLLBACK

查询undo表空间保存历史数据最久多少:

SQL> show parameter undo_r

NAME TYPE VALUE

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

undo_retention integer 900

undo表空间建立、删除、更改:

1)建立:建库时自动建立

手工建立:SQL>create smallfile|bigfile undo tablespace <name> datafile <dir> size <size> autoextend on next size <size> maxsize <size>;

SQL> create undo tablespace undo1 datafile '/u01/oracle/oradata/orcl/undo1.dbf' size 100m autoextend on;

Tablespace created.

2)删除:drop tablespace <undoname> including contents and datafile;

3)更改:alter system set audo_tablespace=<undo_name>;

OR

SQL>alter tablespace undotbs1 tename to undotbs;

SQL>shutdown immediate

SQL>startup

估算undo表空间该设为多大大小:

公式:undo space=(undo_retention*(undo blocks per second*db block size))+db block_size

SQL> show parameter undo_retention

NAME TYPE VALUE

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

undo_retention integer 900

SQL> select sum(undoblks)/sum((end_time-begin_time)*10800) from v$undostat;

SUM(UNDOBLKS)/SUM((END_TIME-BEGIN_TIME)*10800)

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

1.98037077

SQL> select 900* 1.98037077*8192 from dual;

900*1.98037077*8192

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

14600877.6

查询undo表空间当前分配大小:

1)SQL> select max(block_id) from dba_extents where file_id=2;

MAX(BLOCK_ID)

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

4617

2)SQL> select 4617*8192/1024/1024||'G' from dual;

4617*8192/1

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

36.0703125G

作用:可以将undo表空间容量变小。

undo的资料查询:(47后半部分)

1)SQL> desc dba_rollback_segs

Name Null? Type

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

SEGMENT_NAME NOT NULL VARCHAR2(30)

OWNER VARCHAR2(6)

TABLESPACE_NAME NOT NULL VARCHAR2(30)

SEGMENT_ID NOT NULL NUMBER

FILE_ID NOT NULL NUMBER

BLOCK_ID NOT NULL NUMBER

INITIAL_EXTENT NUMBER

NEXT_EXTENT NUMBER

MIN_EXTENTS NOT NULL NUMBER

MAX_EXTENTS NOT NULL NUMBER

PCT_INCREASE NUMBER

STATUS VARCHAR2(16)

INSTANCE_NUM VARCHAR2(40)

RELATIVE_FNO NOT NULL NUMBER

SQL> select TABLESPACE_NAME,SEGMENT_NAME,FILE_ID from dba_rollback_segs;

2)SQL> desc v$rollname

Name Null? Type

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

USN NUMBER

NAME NOT NULL VARCHAR2(30)

SQL> select * from v$rollname;

USN NAME

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

0 SYSTEM

1 _SYSSMU1$

2 _SYSSMU2$

3 _SYSSMU3$

4 _SYSSMU4$

5 _SYSSMU5$

6 _SYSSMU6$

7 _SYSSMU7$

8 _SYSSMU8$

9 _SYSSMU9$

10 _SYSSMU10$

11 rows selected.

3)SQL> desc v$rollstat;

Name Null? Type

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

USN NUMBER

LATCH NUMBER

EXTENTS NUMBER

RSSIZE NUMBER

WRITES NUMBER

XACTS NUMBER

GETS NUMBER

WAITS NUMBER

OPTSIZE NUMBER

HWMSIZE NUMBER

SHRINKS NUMBER

WRAPS NUMBER

EXTENDS NUMBER

AVESHRINK NUMBER

AVEACTIVE NUMBER

STATUS VARCHAR2(15)

CUREXT NUMBER

CURBLK NUMBER

4)SQL> desc dba_segments

Name Null? Type

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

OWNER VARCHAR2(30)

SEGMENT_NAME VARCHAR2(81)

PARTITION_NAME VARCHAR2(30)

SEGMENT_TYPE VARCHAR2(18)

TABLESPACE_NAME VARCHAR2(30)

HEADER_FILE NUMBER

HEADER_BLOCK NUMBER

BYTES NUMBER

BLOCKS NUMBER

EXTENTS NUMBER

INITIAL_EXTENT NUMBER

NEXT_EXTENT NUMBER

MIN_EXTENTS NUMBER

MAX_EXTENTS NUMBER

PCT_INCREASE NUMBER

FREELISTS NUMBER

FREELIST_GROUPS NUMBER

RELATIVE_FNO NUMBER

BUFFER_POOL VARCHAR2(7)

5)SQL> desc v$transaction

Name Null? Type

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

ADDR RAW(4)

XIDUSN NUMBER

XIDSLOT NUMBER

XIDSQN NUMBER

UBAFIL NUMBER

UBABLK NUMBER

UBASQN NUMBER

UBAREC NUMBER

STATUS VARCHAR2(16)

START_TIME VARCHAR2(20)

START_SCNB NUMBER

START_SCNW NUMBER

START_UEXT NUMBER

START_UBAFIL NUMBER

START_UBABLK NUMBER

START_UBASQN NUMBER

START_UBAREC NUMBER

SES_ADDR RAW(4)

FLAG NUMBER

SPACE VARCHAR2(3)

RECURSIVE VARCHAR2(3)

NOUNDO VARCHAR2(3)

PTX VARCHAR2(3)

NAME VARCHAR2(256)

PRV_XIDUSN NUMBER

PRV_XIDSLT NUMBER

PRV_XIDSQN NUMBER

PTX_XIDUSN NUMBER

PTX_XIDSLT NUMBER

PTX_XIDSQN NUMBER

DSCN-B NUMBER

DSCN-W NUMBER

USED_UBLK NUMBER

USED_UREC NUMBER

LOG_IO NUMBER

PHY_IO NUMBER

CR_GET NUMBER

CR_CHANGE NUMBER

START_DATE DATE

DSCN_BASE NUMBER

DSCN_WRAP NUMBER

START_SCN NUMBER

DEPENDENT_SCN NUMBER

XID RAW(8)

PRV_XID RAW(8)

PTX_XID RAW(8)

undo表空间的应用:

1)事务的回退:事务没有结束之前才能执行。

SQL>rollback;

SQL> show user

USER is "SCOTT"

SQL> delete from emp where deptno=10;

3 rows deleted

SQL> savepoint s1;

Savepoint created.

SQL> delete from emp where deptno=20;

5 rows deleted.

SQL> savepoint s2;

Savepoint created.

SQL> delete from emp where deptno=30;

6 rows deleted.

SQL> savepoint s3;

Savepoint created.

SQL> select * from emp;

no rows selected

SQL> rollback to s2;

Rollback complete.

SQL> select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM

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

DEPTNO

----------

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300

30

7521 WARD SALESMAN 7698 22-FEB-81 1250 500

30

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400

30

7698 BLAKE MANAGER 7839 01-MAY-81 2850

30

7844 TURNER SALESMAN 7698 08-SEP-81 1500 0

30

7900 JAMES CLERK 7698 03-DEC-81 950

30

6 rows selected.

SQL> rollback to s1;

Rollback complete.

SQL> select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM

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

DEPTNO

----------

7369 SMITH CLERK 7902 17-DEC-80 800

20

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300

30

7521 WARD SALESMAN 7698 22-FEB-81 1250 500

30

7566 JONES MANAGER 7839 02-APR-81 2975

20

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400

30

7698 BLAKE MANAGER 7839 01-MAY-81 2850

30

7788 SCOTT ANALYST 7566 19-APR-87 3000

20

7844 TURNER SALESMAN 7698 08-SEP-81 1500 0

30

7876 ADAMS CLERK 7788 23-MAY-87 1100

20

7900 JAMES CLERK 7698 03-DEC-81 950

30

7902 FORD ANALYST 7566 03-DEC-81 3000

20

11 rows selected.

2)事务的提交:自动或手工结束事务。

commit或是执行ddl语句或者设置数据库自动提交。

SQL> commit;

Commit complete.

3)闪回数据:

SQL> insert into emp select * from emp as of timestamp sysdate-5/1440;

14 rows created.

undo备份:

热备:A)alter tablespace undotbs1 begin backup;

B)$cp '<undotbs1 dir>' /bak

C)alter tablespace undotbs1 end backup;

rman备份:

rman备份:back tablespace undotbs1;

[oracle@localhost ~]$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Mar 18 09:31:40 2015

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

connected to target database: REZIN (DBID=633392282)

RMAN> back tablespace undotbs1;

恢复:

[oracle@localhost ~]$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Sat Mar 21 00:28:34 2015

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

connected to target database: ORCL (DBID=1402521782, not open)

RMAN> restore tablespace undotbs1;

Starting restore at 21-MAR-15

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=156 devtype=DISK

channel ORA_DISK_1: starting datafile backupset restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

restoring datafile 00002 to /u01/oracle/oradata/orcl/undotbs01.dbf

channel ORA_DISK_1: reading from backup piece /u01/oracle/flash_recovery_area/ORCL/backupset/2015_03_21/o1_mf_nnndf_TAG20150321T002210_bjrl9mqr_.bkp

channel ORA_DISK_1: restored backup piece 1

piece handle=/u01/oracle/flash_recovery_area/ORCL/backupset/2015_03_21/o1_mf_nnndf_TAG20150321T002210_bjrl9mqr_.bkp tag=TAG20150321T002210

channel ORA_DISK_1: restore complete, elapsed time: 00:00:07

Finished restore at 21-MAR-15

RMAN> recover tablespace undotbs1;

Starting recover at 21-MAR-15

using channel ORA_DISK_1

starting media recovery

media recovery complete, elapsed time: 00:00:02

Finished recover at 21-MAR-15

SQL> alter database datafile 2 online;

Database altered.

SQL> alter database open;

Database altered.

无备份情况下的恢复:(48集)

1)系统中是否存在其他的undo表空间,如果存在,则替换其他的undo表空间,并且将损坏的undo表空间脱机,然后启动数据库到open阶段,再删除损坏的undo表空间,然后建立新的undo表空间。

2)系统中没有其他的undo表空间,使用隐藏参数,让undo表空间offline,打开数据库,再删除损坏undo表空间,然后再建立新的undo表空间。

无备份情况下的恢复步骤:

附:dml语句执行过程图解:

users表空间管理

作用:默认的用户表空间,存放用户数据。

如何指定用户的默认表空间:

查询用户默认用户表空间:database_properties

SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where property_name like '%DEF%';

PROPERTY_NAME PROPERTY_VALUE

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

DEFAULT_TEMP_TABLESPACE TEMP

DEFAULT_PERMANENT_TABLESPACE USERS

DEFAULT_TBS_TYPE SMALLFILE

修改用户默认表空间:

SQL> alter database default tablespace users1;

Database altered.

结果如下:

SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where property_name like '%DEF%';

PROPERTY_NAME PROPERTY_VALUE

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

DEFAULT_TEMP_TABLESPACE TEMP

DEFAULT_PERMANENT_TABLESPACE USERS1

DEFAULT_TBS_TYPE SMALLFILE

users表空间备份:包括用户自定义的表孔间备份方法

热备:A)alter tablespace users begin backup;

B)$cp '<system dir>' /bak

C)alter tablespace users end backup;

rman备份:back tablespace users;

[oracle@localhost ~]$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Wed Mar 18 09:31:40 2015

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

connected to target database: REZIN (DBID=633392282)

RMAN> back tablespace users;

users表空间恢复:包括用户自定义的表孔间还原方法

1)热备还原:

SQL> ho cp /u01/oracle/users01.dbf /u01/oracle/oradata/orcl/users01.dbf

SQL> recover tablespace users;

Media recovery complete.

SQL> alter database open;

Database altered.

2)rman还原

RMAN>restore tablespace users;

RMAN>recover tablespace users;

SQL>alter tablespace users online;

3)用户自定义表空间,无备份,归档模式下,表空间创建以来日志文件全恢复方法:

alter database create datafile N as '<dir>';

SQL> alter tablespace users1 offline;

alter tablespace users1 offline

*

ERROR at line 1:

ORA-01116: error in opening database file 6

ORA-01110: data file 6: '/u01/oracle/oradata/orcl/user1.dbf'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

SQL> alter database datafile 6 offline;

Database altered.

SQL> alter database create datafile 6 as '/u01/oracle/oradata/orcl/user1.dbf';

Database altered.

SQL> recover tablespace users1;

Media recovery complete.

SQL> alter tablespace users1 online;

Tablespace altered.

SQL> select * from u1.u;

I

----------

1

1

1

附加:如果以上办法还是不能恢复users1表空间,则表示该表空间不能恢复,我们只能舍弃该表空间中的数据:即脱机数据文件。

SQL>alter database datafile <name> offline;

temp表空间管理:

作用:用于存放用户排序的临时数据。排序首先进行内存排序,如果内存中排序满足不了就会采取temp表空间进行排序。

如何指定用户的默认临时表空间:

查询用户默认用户表空间:database_properties

SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where property_name like '%DEF%';

PROPERTY_NAME PROPERTY_VALUE

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

DEFAULT_TEMP_TABLESPACE TEMP

DEFAULT_PERMANENT_TABLESPACE USERS

DEFAULT_TBS_TYPE SMALLFILE

修改用户默认表空间:

SQL> alter database default temporary tablespace temp1;

Database altered.

结果如下:

SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where property_name like '%DEF%';

PROPERTY_NAME PROPERTY_VALUE

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

DEFAULT_TEMP_TABLESPACE TEMP1

DEFAULT_PERMANENT_TABLESPACE USERS

DEFAULT_TBS_TYPE SMALLFILE

1建立temp表空间

SQL> create temporary tablespace temp1 tempfile '/u01/oracle/oradata/orcl/temp1.dbf' size 100m;

Tablespace created.

查询系统下的临时表空间:desc dba_temp_files、v$tempfile

SQL> desc dba_temp_files

Name Null? Type

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

FILE_NAME VARCHAR2(513)

FILE_ID NUMBER

TABLESPACE_NAME NOT NULL VARCHAR2(30)

BYTES NUMBER

BLOCKS NUMBER

STATUS CHAR(9)

RELATIVE_FNO NUMBER

AUTOEXTENSIBLE VARCHAR2(3)

MAXBYTES NUMBER

MAXBLOCKS NUMBER

INCREMENT_BY NUMBER

USER_BYTES NUMBER

USER_BLOCKS NUMBER

SQL> desc v$tempfile

Name Null? Type

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

FILE# NUMBER

CREATION_CHANGE# NUMBER

CREATION_TIME DATE

TS# NUMBER

RFILE# NUMBER

STATUS VARCHAR2(7)

ENABLED VARCHAR2(10)

BYTES NUMBER

BLOCKS NUMBER

CREATE_BYTES NUMBER

BLOCK_SIZE NUMBER

NAME VARCHAR2(513)

SQL> col TABLESPACE_NAME for a20;

SQL> col FILE_NAME for a40;

SQL> select tablespace_name,file_name from dba_temp_files;

TABLESPACE_NAME FILE_NAME

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

TEMP /u01/oracle/oradata/orcl/temp01.dbf

TEMP1 /u01/oracle/oradata/orcl/temp1.dbf

建立临时表空间组:

SQL> create temporary tablespace temp2 tempfile '/u01/oracle/oradata/orcl/temp2.dbf' size 100m tablespace group temp11;

Tablespace created.

SQL> alter tablespace temp1 tablespace group temp11;

Tablespace altered.

查询临时表空间组:dba_tablespace_groups

SQL> desc dba_tablespace_groups

Name Null? Type

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

GROUP_NAME NOT NULL VARCHAR2(30)

TABLESPACE_NAME NOT NULL VARCHAR2(30)

SQL> select * from dba_tablespace_groups;

GROUP_NAME TABLESPACE_NAME

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

TEMP11 TEMP1

TEMP11 TEMP2

临时表空间与临时表空间组区别:

A、temp group至少具备1个临时表空间

B、如果把表空间组下面的成员删除,就相当于把临时表空间组也删除了。

C、组名字和表空间名字不能有相同的。

临时表空间组好处:

A、sql语句进行并发操作时,使用临时表空间组有好处。

B、并发操作时,会话可以分配到不同的临时表空间里去。

C、可以随时添加临时表空间成员。

2、如何指定默认的临时表空间

数据库级别:

SQL> alter database default temporary tablespace temp11;

Database altered.

用户级别:

SQL>alter user scott temporary tablespace temp11;

Database altered.

3、备份:临时表空间不需要备份。

4、恢复:建立新的临时表空间,设置默认,删除旧的。或为临时表孔间加tempfile或启用临时表空间组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: