ITPub博客

首页 > 数据库 > Oracle > Oracle数据库逻辑结构IV

Oracle数据库逻辑结构IV

原创 Oracle 作者:糖糖TJ 时间:2015-07-22 20:56:26 0 删除 编辑

<!--[if !supportLists]-->(一)、<!--[endif]-->创建表空间

<!--[if !supportLists]-->1. <!--[endif]-->创建表空间要考虑的因素

在创建数据库完毕后,通常可以立即创建所需的非SYSTEM表空间,在创建表空间时,除考虑到空间数量、对应的数据文件的大小等基本因素外,还要考虑表空间存储管理方式、默认存储参数设置、块大小等问题。

Oracle本身并不能限制表空间的数目,但是受到数据库所能拥有的数据文件数目的限制,只能创建有限数时的表空间。即所有表空间的数据文件的总和不能超过创建数据库时指定的MAXDATAFILES参数的限制。创建的表空间在默认情况具有标准的块大小,但是也可以创建具有非标准块大小的表空间。

CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name

    DATAFILE datafile spec | TEMPFILE tempfile spec

    [MINIMUM EXTENT minimum extent size]

    [BLOCKSIZE blocksize]

    [[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]

    [LOGGING|NOLOGGING]

    [FORCE LOGGING]

    [ONLINE|OFFLINE]

    [EXTENT MANAGEMENT DICTIONARY |

    LOCAL [AUTOALLOCATE|UNIFORM SIZE size]]

    [SEGMENT SPACE MANAGEMENT MANUAL|AUTO]

    [FLASHBACK ON|OFF]

参数说明如下:

<!--[if !supportLists]-->? <!--[endif]-->DATAFILE:用于指定表空间所对应的数据文件。

<!--[if !supportLists]-->? <!--[endif]-->SIZE:用于指定数据文件的尺寸。

<!--[if !supportLists]-->? <!--[endif]-->EXTENT MANAGEMENT DICTIONARY:表空间中区的管理方式为字典管理方式。

<!--[if !supportLists]-->? <!--[endif]-->DEFAULT STORAGE:用于指定默认存储参数设置。当不设置默认存储参数时,系统会自动使用SYSTEM表空间的存储参数设置。

<!--[if !supportLists]-->? <!--[endif]-->INITIAL:用于指定为数据库对象所分配的第一个区的大小。

<!--[if !supportLists]-->? <!--[endif]-->NEXT:用于指定为数据库对象所分配的第二个区的大小。

<!--[if !supportLists]-->? <!--[endif]-->MINEXTENTS:用于指定为数据库对象所分配的最少区个数。

<!--[if !supportLists]-->? <!--[endif]-->MAXEXTENTS:用于指定为数据库对象所分配的最多区个数。

<!--[if !supportLists]-->? <!--[endif]-->PCTINCREASE:用于指定从第三个区开始,每个区比前一个区所增长的百分比,并且区尺寸的计算公式如下:

<!--[if !supportLists]-->? <!--[endif]-->Size=NEXT *(1+PCIINCREASE/100)(n-2)

<!--[if !supportLists]-->? <!--[endif]-->其中,n表示第n个区,除了第一个区和第二个区以外,其他区尺寸会自动转变为DB_BLOCK_SIZE的整数倍。

<!--[if !supportLists]-->2. <!--[endif]-->本地管理的表空间中的段空间管理

用户使用 CREATE TABLESPACE 语句创建一个本地管理的表空间(locally managed tablespace)时,可以使用 SEGMENT SPACE MANAGEMENT 子句来设定段(segment)内的可用/已用空间如何管理。可选的方式有: 

<!--[if !supportLists]-->1.<!--[endif]-->AUTO

在这种设置下,Oracle使用位图(bitmap)管理段内的可用空间。[注意此处的位图与本地管理的表空间使用的位图不一样]此处的位图用于描述段内每个数据块(data block)是否有足够的可用空间来插入(insert)新数据。随着一个数据块中可用空间的变化,她的状态也被及时地反映到位图中。Oracle使用位图可以更自动化地管理段内的可用空间。这种空间管理形式被称为自动段空间管理(automatic segment-space management)。

一个本地管理的(locally managed),且使用自动段空间管理的表空间,既可以被创建为小文件表空间(传统的)(smallfile tablespace),也可以被创建为大文件表空间(bigfile tablespaces)。在创建本地管理的表空间时,自动段空间管理是默认值。  

<!--[if !supportLists]-->2.<!--[endif]-->MANUAL

在这种设置下,Oracle使用可用块列表(free list)来管理段内的可用空间。可用块列表记录了所有可以被用于插入新数据的数据块。 


<!--[if !supportLists]-->(二)、<!--[endif]-->其他表空间操作

调整表空间大小

如果登录到Oracle数据库,并给某表插人数据时,发现在插人数据时总是显示错误信息,但是可以查询该表数据,可以考虑查看表空间大小,如果数据已占满了表空间,表空间不能分配新的区时用户不能插入数据记录。理想情况下,在建立表空间时就应该规划好其尺寸,以避免出现以上问题。但是如果表空间不足以存放更多数据,那么DBA可以改变表空间的尺寸。但是如果DBA等表空间不足时才去扩展表空间的容量,会影响Oracle的性能,因此,DBA需要知道现在的对象多大,对象的增长速度有多快,有规律的检查数据块对象的大小,把注意力集中在快速增长的表上,经常查看表空间中的自由空间,然后主动增加表空间的容量,提高系统的性能。

表空间物理上表现为一个或多个数据文件,表空间的尺寸即表空间所有数据文件尺寸的总和。因此表空间的大小由数据文件的个数和数据文件的大小来决定,可通过以下方法进行调整:

<!--[if !supportLists]-->? <!--[endif]-->重置数据文件的大小:ALTER DATABASE DATAFILE '...' | FileNo RESIZE XX

<!--[if !supportLists]-->? <!--[endif]-->更改数据文件的大小:可以使用数据文件AUTOEXTEND(自动扩展)属性自动调整数据文件的大小,也可以 使用ALTER TABLESPACE 手动调整。

<!--[if !supportLists]-->? <!--[endif]-->使用ALTER TABLESPACE 命令给表空间添加新的数据文件

 

1.数据文件的自动扩展属性(AUTOEXTEND)

当激活了数据文件的自动扩展选项之后,如果数据占满了数据文件所有空间,并且该数据文件不能容纳新数据时,系统会自动扩展该数据文件。可以指定数据文件的AUTOEXTEND 子句启用或禁用数据文件的自动扩展。文件将按指定的增量增加直到达到指定的最大值。使用AUTOEXTEND 子句的优点如下:

<!--[if !supportLists]-->? <!--[endif]-->当表空间的空间用尽时无需过多的直接干预。

<!--[if !supportLists]-->? <!--[endif]-->确保应用程序不会由于未能分配区而暂停。

创建数据文件后,可使用下列SQL 命令启用数据文件的自动扩展:

<!--[if !supportLists]-->? <!--[endif]-->CREATE TABLESPACE 

<!--[if !supportLists]-->? <!--[endif]-->ALTER TABLESPACE 

 

【实例8-9】创建表空间mytbs8并设置数据文件为自动扩展。

1)以管理员身份登录

SQL> CONNECT /  AS SYSDBA

2)创建表空间

SQL> CREATE TABLESPACE mytbs8

DATAFILE 'd:\oracle\oradata\db01\mytbs08.dbf' SIZE 5M

AUTOEXTEND ON NEXT 1M MAXSIZE 50M;

表空间已创建。

3)查询DBA_DATA_FILES 视图以确定是否启用AUTOEXTEND

SQL> SELECT FILE_NAME,AUTOEXTENSIBLE

FROM DBA_DATA_FILES

WHERE TABLESPACE_NAME='MYTBS8';

FILE_NAME                                AUT

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

D:\ORACLE\ORADATA\DB01\MYTBS08.DBF       YES

 

说明:可以在创建数据库时指定数据文件的自动扩展属性,命令格式如下:

CREATE TABLESPACE tablespace

DATAFILE filespec [autoextend_clause]

autoextend_clause:== [AUTOEXTEND {OFF|ON[NEXT integer[K|M]]

[MAXSIZE UNLIMITED | integer[K|M]] } ]

其中:

AUTOEXTEND OFF:禁用数据文件的自动扩展

AUTOEXTEND ON:启用数据文件的自动扩展

NEXT:自动扩展时每次分配给数据文件的磁盘空间

MAXSIZE:指定允许分配给该数据文件的最大磁盘空间

UNLIMITED:将分配给数据文件的磁盘空间设为不受限

 

可以为现有数据文件指定AUTOEXTEND,格式如下

ALTER DATABASE [database]

DATAFILE 'filename'[, 'filename']... autoextend_clause

【实例8-10】修改表空间mytbs7的数据文件为自动扩展。

1)以管理员身份登录

SQL>CONNECT /  AS SYSDBA

2)修改表空间

SQL> ALTER DATABASE

DATAFILE 'd:\oracle\oradata\db01\mytbs7.ora' AUTOEXTEND ON

NEXT 1M MAXSIZE UNLIMITED;

数据库已更改。 

3)查询DBA_DATA_FILES 视图以确定是否启用AUTOEXTEND

SQL> SELECT FILE_NAME,AUTOEXTENSIBLE

FROM DBA_DATA_FILES

WHERE TABLESPACE_NAME='MYTBS7';

结果略

 

如果想禁用文件的自动扩展属性,只要将on改变off就可以了。默认情况下,表空间不不允许自动扩展的。

如:

SQL> ALTER DATABASE

DATAFILE 'd:\oracle\oradata\db01\mytbs7.ora' AUTOEXTEND OFF;

2.为表空间增加数据文件

可以通过ALTER TABLESPACE ADD DATAFILE 命令,向表空间添加数据文件以增加分配给表空间的磁盘空间总量。命令格式如下:

ALTER TABLESPACE tablespace

ADD DATAFILE  filespec [autoextend_clause]

【实例8-11】为mytbs3表空间增加一个数据文件,大小为5MB.

1)以管理员身份登录

SQL>CONNECT /  AS SYSDBA

2)增加数据文件

SQL>ALTER TABLESPACE mytbs3

ADD DATAFILE 'd:\oracle\oradata\db01\mytbs3c.dbf' SIZE 5M;

表空间已更改。

3)查询DBA_DATA_FILES确认是否增加了数据文件

SQL> SELECT FILE_NAME

FROM DBA_DATA_FILES

WHERE TABLESPACE_NAME='MYTBS3';

FILE_NAME

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

D:\ORACLE\ORADATA\DB01\MYTBS3A.DBF

D:\ORACLE\ORADATA\DB01\MYTBS3B.DBF

D:\ORACLE\ORADATA\DB01\MYTBS3C.DBF

通过查询结果可以看到,数据文件由原来的2个增加为3个。

3.手工修改数据文件大小

尽管指定自动扩展选项可以使得数据文件在数据写满的情况下自动扩展,但自动扩展导致递归空间操作,从而降低系统性能。例如,当使用SQL*Loader给表EMP装载大批量数据时,在数据写满数据文件之后需要先扩展数据文件,然后才能装载数据,因而会导致系统性能的降低。因此,在执行批量数据装载操作之前,你应该首先确定数据文件是否能够容纳足够数据。如果不足以容纳数据的话,应该首先扩展该数据文件,然后装载数据。DBA可以使用ALTER DATABASE 命令手动增加或减少数据文件的大小,而不必通过添加数据文件或更改自动扩展属性更改表空间的大小。命令格式如下:

ALTER DATABASE [database]

DATAFILE filename[, filename]...

RESIZE integer[K|M]

其中:

Integer:以字节为单位表示的结果数据文件的绝对大小

如果更改数据文件的大小比实际存储的数据库对象要小,那么数据文件大小只能减少到数据文件内最后一个对象的最后一个块为止,也就是缩减尺寸后表空间必须能容纳已存在的数据对象,否则会提示出错信息。

【实例8-12】将mytbs5表空间中数据文件的大小改为10M.

1)以管理员身份登录

SQL> CONNECT /  AS SYSDBA

2)创建表空间

SQL> ALTER DATABASE

DATAFILE 'd:\oracle\oradata\db01\mytbs05.dbf'  RESIZE 10M;

数据库已更改。

3)查询以确认更改

SQL> SELECT BYTES FROM DBA_DATA_FILES 

WHERE TABLESPACE_NAME='MYTBS5';

     BYTES

----------

  10485760

【练习8-3】重新更改mytbs5表空间大小为5M

<!--[if !supportLists]-->3. <!--[endif]-->修改表空间读写属性

当表空间用于存放静态数据时,因为不会对这些数据进行修改操作,所以可以将这些数据存放到只读设备上,例如存放到光盘上。为了将表空间放到只读设备上,必须将其转变为只读状态。下面的命令将表空间改为只读模式:

ALTER TABLESPACE [tablespace] READ ONLY;

执行这条命令时,与该表空间相关的所有事务会自动回滚,过渡状态期间不允许再对该表空间进行任何写入操作。当所有事务处理提交或者回退后,只读命令完成,该表空间置于只读模式。

 

【实例8-13】在表空间mytbs3中创建表test,将mytbs3表空间更改为只读状态,验证能否插入数据,能否删除表。

1)以管理员身份登录

SQL> CONNECT /  AS SYSDBA

2)创建表

SQL> CREATE TABLE test (name varchar(20))

TABLESPACE mytbs3;

表已创建。        

3)将表空改为只读状态

SQL> ALTER TABLESPACE mytbs3 READ ONLY;

表空间已更改。    

4)向表中插入一条数据,能否成功,为什么?

SQL> INSERT INTO test VALUES ('SHEN');

INSERT INTO test VALUES ('SHEN')

            *

ERROR 位于第 1 行:

ORA-00372: 此时无法修改文件 16

ORA-01110: 数据文件 16: 'D:\ORACLE\ORADATA\DB01\MYTBS3C.DBF'

表空间只读后不能执行DML操作.

5)删除表,查看能否成功,为什么?

SQL> DROP TABLE test;

表已丢弃。

 

由上例可以看出执行了上述命令之后,会将表空间mytbs3转变为只读状态。此时,用户将只能在该表空间的对象上执行查询操作(SELECT),而不能执行DMLDDL操作。但大家要注意,有一种DDL操作例外,可以执行DROP TABLEDROP INDEX删除该表空间上的表或索引,因为这些命令只影响数据字典(数据字典位于SYSTEM表空间)。之所以可以这样操作,是因为DROP 命令只更新数据字典,而不更新只读表空间上的物理文件。对于本地管理的表空间,删除的段将改为临时段以避免更新位图。将表空间设为只读状态之前,将会引发对表空间的数据文件执行检查点操作。将表空间设为只读可防止对表空间中的数据文件进行任何写操作,因此,数据文件可驻留在只读介质上,如CD-ROM 或一次性写入(WORM) 驱动器。使用只读表空间的好处是可以免去对数据库大量的静态数据执行备份。

要在只读表空间上执行DML操作,必须将表空间改为可写状态,可以使用ALTER TABLESPACE [tablespace] READ WRITE命令,但是表空间内的所有数据文件都必须联机。

【实例8-14】将mytbs3表空间更改为可读写状态,验证是否能够创建表。

1)以管理员身份登录

SQL>CONNECT /  AS SYSDBA

2)改为可读可写状态

SQL> ALTER TABLESPACE mytbs3 READ WRITE;

表空间已更改。

3)创建表test验证表空间的状态

SQL> CREATE TABLE test (name varchar(20))

TABLESPACE mytbs3;

表已创建。

 

在这里建表操作成功,也说明上一实例在只读状态下对表的删除是成功的。

<!--[if !supportLists]-->4. <!--[endif]-->修改表空间的ONLINE/OFFLINE属性

通过将一个表空间置于联机或脱机状态来控制表空间的可用性。当表空间处于联机状态时,用户可以访问其中的数据。当某一表空间处于脱机状态时,用户无法访问它的数据,但是允许正常访问数据库的其余处于联机的表空间。以下几种情况下数据库管理员可以让表空间脱机:

<!--[if !supportLists]-->? <!--[endif]-->使数据库的一部分表空间不可用,但允许正常访问数据库的其余表空间

<!--[if !supportLists]-->? <!--[endif]-->执行脱机表空间备份(尽管表空间可以在联机使用时备份)

<!--[if !supportLists]-->? <!--[endif]-->在数据库打开时恢复表空间或数据文件

<!--[if !supportLists]-->? <!--[endif]-->在数据库打开时移动数据文件

可以使用如下命令对表空间进行脱机和联机操作:

ALTER TABLESPACE tablespace

{ONLINE |OFFLINE [NORMAL|TEMPORARY|IMMEDIATE|FOR RECOVER]}

其中:

NORMAL:将该表空间中所有数据文件内的所有块从SGA 中写入数据文件并将数据文件关闭。这是缺省设置。在使该表空间重新联机之前,无须对其执行介质恢复。尽可能使用NORMAL 子句。

TEMPORARY:对表空间内的所有联机数据文件执行检查点操作,但是在执行检查点时并不检查数据文件的状态,即使某些文件无法写入检查点,Oracle也会忽略这些错误。在使用此种表空间重新联机之前,所有脱机文件可能都需要进行介质恢复。

IMMEDIATE:不保证表空间文件可用,而且不执行检查点操作。在使表空间重新联机前,必须对其执行介质恢复操作。

FOR RECOVER:使表空间脱机以进行表空间时间点恢复。

只要数据库打开,数据库管理员就可以使任意一个表空间脱机(SYSTEM 表空间和任何具有活动还原段或临时段的表空间除外)。当一个表空间脱机后,Oracle 服务器将使与之相关联的所有数据文件脱机。

【实例8-15】将mytbs3表空间改为脱机状态,并向test表中插入一条数据进行验证。

1)以管理员身份登录

SQL> CONNECT /  AS SYSDBA

2)改为脱机状态

SQL> ALTER TABLESPACE mytbs3 OFFLINE NORMAL;

表空间已更改。

3)查询数据

SQL> SELECT * FROM test;

SELECT * FROM test

              *

ERROR 位于第 1 行:

ORA-00376: 此时无法读取文件 16

ORA-01110: 数据文件 16: 'D:\ORACLE\ORADATA\DB01\MYTBS3C.DBF'

说明:执行查询操作时用户将收到一条错误消息,因为当表空间脱机后,Oracle 不允许有任何SQL 语句引用该表空间含有的对象,即用户不能访问该表空间。

当表空间脱机或者重新联机后,该事件记录在数据字典和控制文件内。如果关闭数据库时表空间仍然脱机,则当随后数据库装载并重新打开时,该表空间仍保持脱机状态且不会被检查。如果遇到某些错误(例如,当数据库写入程序进程DBWn 几次试图向某表空间的数据文件写入都失败时),Oracle实例(Instance)自动将表空间从联机状态切换为脱机状态。

不能设为脱机的表空间:SYSTEM 表空间,具有活动的还原段的表空间,缺省临时表空间。

当希望访问表空间中的数据如表、索引等对象时,表空间必须处于联机状态。

【实例8-16】将mytbs3表空间改为联机状态,并向test表中插入一条数据进行验证。

1)以管理员身份登录

SQL> CONNECT /  AS SYSDBA

2)改为联机状态

SQL> ALTER TABLESPACE mytbs3 ONLINE;

表空间已更改。

3)插入数据

SQL> INSERT INTO test VALUES('SHEN');

已创建 1 行。

 

说明:插入数据成功,因为表空间处于联机状态。

<!--[if !supportLists]-->5. <!--[endif]-->数据文件的脱机与联机

与表空间类似,联机的数据文件也可以被设置为脱机状态。脱机的数据文件对于数据库来说是不可用的,直到它们被恢复为联机状态为止。如果数据文件发生损坏时,Oracle会自动将这个数据文件设置为脱机状态,并且记录在警告文件中。如果损坏的文件恢复后,需要以手工方式重新将数据文件恢复为联机状态。

将数据文件设置为脱机状态,不会影响表空间的状态,但是反过来,将表空间设置为脱机状态后,属于该表空间的数据文件同时会进入脱机状态。如果想改变数据文件的状态,可以使用ALTER DATABASE命令。

【实例8-17】将数据文件D:\ORACLE\ORADATA\DB01\MYTBS3C.DBF改为脱机状态,然后再改为联机状态。

1)以管理员身份登录

SQL> CONNECT /  AS SYSDBA

2)改为脱机状态

SQL> ALTER DATABASE DATAFILE

'D:\ORACLE\ORADATA\DB01\MYTBS3C.DBF' OFFLINE;

数据库已更改。

3)改为联机状态

SQL> ALTER DATABASE DATAFILE

'D:\ORACLE\ORADATA\DB01\MYTBS3C.DBF' ONLINE;

数据库已更改。

<!--[if !supportLists]-->6. <!--[endif]-->数据文件的移动

为了防止数据丢失和减少I/O冲突,提高I/O性能,应该将数据文件尽可能分布到不同磁盘上,并且尽可能均衡不同磁盘之间的IO操作。移动数据文件一方面是出于性能方面的考虑,另一方面出于安全考虑。因此在实际数据库应用中可能会移动数据文件。移动数据文件有两种方法,一种方法是使用ALTER TABLESPACE命令,另一种方法是使用ALTER DATABASE命令,具体采用哪种方法取决于表空间类型。

1.使用ALTER TABLESPACE命令

使用ALTER TABLESPACE命令格式如下:

ALTER TABESPACE tablespace

RENAME DATAFILE 'filename'[, 'filename']...

TO 'filename'[, 'filename']...

它仅适用于不含活动还原段或临时段的非SYSTEM 表空间中的数据文件的移动。源文件名必须与存储在控制文件内的名称匹配,表空间必须脱机,并且TO子句后的目标数据文件必须存在。

ALTER TABLESPACE 命令重命名数据文件的步骤:

<!--[if !supportLists]-->? <!--[endif]-->使表空间脱机。

<!--[if !supportLists]-->? <!--[endif]-->使用操作系统命令移动或复制文件。

<!--[if !supportLists]-->? <!--[endif]-->执行ALTER TABLESPACE RENAME DATAFILE 命令。

<!--[if !supportLists]-->? <!--[endif]-->使表空间联机。

<!--[if !supportLists]-->? <!--[endif]-->必要时使用操作系统命令删除原来的数据文件。

【实例8-18】将mytbs3表空间的第三个数据文件由D:盘移动到E:盘。

1)以管理员身份登录

SQL> CONNECT /  AS SYSDBA

2)使表空间脱机

SQL> ALTER TABLESPACE mytbs3 OFFLINE;

表空间已更改

3) 使用操作系统命令移动或复制文件

复制mytbs3表空间的第三个数据文件到E:盘相同目录下(需要先创建目录)。如果不能确定mytbs3表空间包含的数据文件,请查询dba_data_files

4)执行ALTER TABLESPACE RENAME DATAFILE 命令

SQL> ALTER TABLESPACE mytbs3 

RENAME DATAFILE 'd:\oracle\oradata\db01\mytbs3c.dbf' 

TO 'e:\oracle\oradata\db01\mytbs3c.dbf';

表空间已更改

5) 使表空间联机

SQL> ALTER TABLESPACE mytbs3 ONLINE;

表空间已更改

6) 查询表空间的数据文件

SQL> SELECT FILE_NAME FROM DBA_DATA_FILES 

WHERE TABLESPACE_NAME='MYTBS3';

FILE_NAME

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

D:\ORACLE\ORADATA\DB01\MYTBS3A.DBF

D:\ORACLE\ORADATA\DB01\MYTBS3B.DBF

E:\ORACLE\ORADATA\DB01\MYTBS3C.DBF

可见第三个数据文件已经由D:盘移动到了E:盘。

说明:必要时使用操作系统命令删除原来的数据文件。

2.使用ALTER DATABASE命令

ALTER DATABASE 命令可用来移动任意类型的数据文件,但是数据库必须处于已装载状态,且目标数据文件必须存在。步骤如下:

<!--[if !supportLists]-->? <!--[endif]-->关闭数据库。

<!--[if !supportLists]-->? <!--[endif]-->使用操作系统命令移动文件。

<!--[if !supportLists]-->? <!--[endif]-->装载数据库。

<!--[if !supportLists]-->? <!--[endif]-->执行ALTER DATABASE RENAME FILE 命令。

<!--[if !supportLists]-->? <!--[endif]-->打开数据库。

 

【实例8-19】将system表空间由D:盘移动到E:盘。

1)以管理员身份登录

SQL>CONNECT /  AS SYSDBA

2) 关闭数据库

SQL> SHUTDOWN NORMAL;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

3)使用操作系统命令将system表空间对应的数据文件移到E:盘相同目录下。

4)将数据启动至装载状态

SQL> STARTUP MOUNT;

ORACLE 例程已经启动。

Total System Global Area   34675092 bytes

Fixed Size                   453012 bytes

Variable Size              29360128 bytes

Database Buffers            4194304 bytes

Redo Buffers                 667648 bytes

数据库装载完毕。 

5)执行ALTER DATABASE RENAME FILE 命令

SQL>ALTER DATABASE RENAME

FILE 'd:\oracle\oradata\db01\system01.dbf'

TO 'e:\oracle\oradata\db01\system01.dbf';

数据库已更改

6) 打开数据库

SQL> ALTER DATABASE OPEN;

数据库已更改。;

因为SYSTEM 表空间无法脱机,必须使用该方法移动SYSTEM 表空间内的数据文件。使用此命令重命名无法脱机的表空间内的文件。

<!--[if !supportLists]-->(三)、<!--[endif]-->删除表空间

当不再需要表空间及其内容时,可以通过下面的DROP TABLESPACE命令从数据库中删除表空间,格式如下:

DROP TABLESPACE tablespace

[INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS]]

其中:

tablespace:指定要删除的表空间的名称

INCLUDING CONTENTS:删除表空间内的所有段

AND DATAFILES:删除关联的操作系统文件

CASCADE CONSTRAINTS:如果要删除的表空间之外的表引用了该表空间内表的主键和唯一键,则删除这种引用完整性约束。

【实例8-21】删除表空间mytbs3, system,查看出现什么现象。

1)以管理员身份登录

SQL>CONNECT /  AS SYSDBA

2) 删除表空间mytbs3

SQL> DROP TABLESPACE mytbs3;

DROP TABLESPACE mytbs3

*

ERROR 位于第 1 行:

ORA-01549: 表空间非空,请使用 INCLUDING CONTENTS 选项

3) 删除表空间mytbs3,增加选项

SQL> DROP TABLESPACE mytbs3

INCLUDING CONTENTS AND DATAFILES;

表空间已丢弃。

4) 删除表空间system

SQL> DROP TABLESPACE system 

INCLUDING CONTENTS AND DATAFILES 

CASCADE CONSTRAINTS;

DROP TABLESPACE system

*

ERROR 位于第 1 行:

ORA-01550: 无法删除系统表空间

 

说明:表空间mytbs3中包含一个表段,因此必须带INCLUDING CONTENTS子句,即删除表空间的同时删除表空间中的对象,加上AND DATAFILES子句可以删除表空间的数据文件。SYSTEM表空间中包含了多种段且可能引用其它表空间中的主键,因此加了CASCADE CONSTRAINTS子句,但是SYSTEM表空间是不能删除的。

使用DROP TABLESPACE命令须遵守如下原则:

<!--[if !supportLists]-->? <!--[endif]-->如果表空间中包含数据段,必须使用INCLUDING CONTENTS 选项。当表空间包含许多对象时,该选项可能会生成许多Undo数据。

<!--[if !supportLists]-->? <!--[endif]-->删除表空间后,其数据将不再包含在数据库内。

<!--[if !supportLists]-->? <!--[endif]-->在删除表空间时,只删除关联数据库控制文件内的文件指针。操作系统文件仍然存在,如果未使用AND DATAFILES 子句或数据文件是OMF,则必须使用适当的操作系统命令明确删除这些文件。

<!--[if !supportLists]-->? <!--[endif]-->即使将表空间切换到只读状态,仍可以删除该表空间以及其中的段。

<!--[if !supportLists]-->? <!--[endif]-->删除表空间之前,建议将表空间脱机,以确保没有事务处理访问该表空间内的任何段。

<!--[if !supportLists]-->? <!--[endif]-->不能删除下列表空间:SYSTEM 表空间和具有活动段的表空间。

 

 

 

<!--[if !supportLists]-->(四)、<!--[endif]-->获取表空间的相关信息

可以使用下列数据字典视图和动态性能视图获取表空间和数据文件的相关信息。

与表空间相关:DBA_TABLESPACE,V$TABLESPACE

与数据文件相关:DBA_DATA_FILES,V$DATAFILE

与临时数据文件相关:DBA_TEMP_FILES,V$TEMPFILE

【实例8-26】查询数据文件的基本信息。

1)以管理员身份登录

SQL> CONNECT /  AS SYSDBA

2) 查询

SQL> SELECT name,file#,status,bytes,checkpoint_change# last_scn

FROM v$datafile;

NAME

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

     FILE# STATUS       BYTES   LAST_SCN

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

D:\ORACLE\ORADATA\DB01\SYSTEM01.DBF

         1 SYSTEM   419430400    5083126

D:\ORACLE\ORADATA\DB01\UNDOTBS01.DBF

         2 ONLINE   209715200    5083126

D:\ORACLE\ORADATA\DB01\CWMLITE01.DBF

         3 ONLINE    20971520    5083126

字段的含义如下:

Name:数据文件的名称和位置;

File#:数据文件的绝对编号;

Status:数据文件的状态,可以有三种:联机、脱机或者属于SYSTEM表空间;

Bytes:数据文件的大小;

Last_scn:数据文件中最后一次写入事务的SCN

【实例8-27】查询表空间users的大小。

1)以管理员身份登录

SQL> CONNECT /  AS SYSDBA

2) 查询

SQL> SELECT sum(bytes) FROM dba_data_files WHERE tablespace_name='SYSTEM';

SUM(BYTES)

----------

 419430400

<!--EndFragment-->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29781254/viewspace-1744981/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-08-01

  • 博文量
    27
  • 访问量
    37847