全部博文(101)
分类: Oracle
2011-04-19 18:47:32
一.一般的数据库,都将索引放在一个单独的表空间,这样做是为了提高数据库的效率。
而只放索引的表空间也可以不做备份,而是采取重建的方法来恢复。
二.实验环境
硬件环境:DELL 笔记本电脑
操作系统:windows xp sp3
数据库版本:10.2.0.1.0
三.环境搭建
3.1 在实例jacky下面有个用户jacky,有dba权限,在jacky用户下我建了2张表;
表结构如下:
SQL> desc shandml;
名称 是否为空? 类型
----------------------------------------- -------- --------------------
SD VARCHAR2(40)
SJ NUMBER(38)
ID NUMBER(2)
SQL> desc b_bk_lstjll;
名称 是否为空? 类型
----------------------------------------- -------- --------------------
SD VARCHAR2(40)
SJ NUMBER(38)
ID NUMBER(2)
3.2下面我会建一个索引表空间jacky_index,在每张表上创建一个索引,索引都建在jacky_index表
空间中;
SQL> create tablespace jacky_index datafile 'f:/jackyindex01.dbf' size 10m;
SQL> create index shandml_id on shandml(id)
2 tablespace jacky_index;
索引已创建。
SQL> create index b_bk_lstjll_id on b_bk_lstjll(id)
2 tablespace jacky_index;
索引已创建。
建议网友将创建的语句放在文本中,以后等要恢复时,直接运作这个脚本就可以了。
四.实验开始
4.1先关闭数据库,然后删除掉jacky_index下的数据文件;
SQL> shutdown immediate;
ORA-01031: 权限不足
SQL> conn sys/you12323 as sysdba;
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del f:/jackyindex01.dbf;
Microsoft Windows XP
欢迎来到Jacky的工作室!!!
今天是2011-04-04 星期一
现在已经是16:17:37.07
4.2开始打开数据库,来解决问题;
SQL> startup open;
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 213912452 bytes
Database Buffers 390070272 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 11 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 11: 'F:/JACKYINDEX01.DBF'
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> --状态为加载,可以查询数据字典,丢失的数据文件的信息;
SQL> col name for a55;
SQL> select file#,status,name from v$datafile;
FILE# STATUS NAME
---------- ------- -------------------------------------------------------
1 SYSTEM E:/ORACLE/PRODUCT/10.2.0/ORADATA/JACKY/SYSTEM01.DBF
2 ONLINE E:/ORACLE/PRODUCT/10.2.0/ORADATA/JACKY/UNDOTBS01.DBF
3 ONLINE E:/ORACLE/PRODUCT/10.2.0/ORADATA/JACKY/SYSAUX01.DBF
4 ONLINE E:/ORACLE/USERS01.DBF
5 ONLINE C:/JINLIAN01.DBF
6 ONLINE C:/JINLIAN_UNDO01.DBF
7 ONLINE C:/JINLIAN_INDEX01.DBF
8 ONLINE C:/JINLIAN_UNDO001.DBF
9 ONLINE D:/HFTB/HF01.DBF
10 ONLINE D:/HFTB/HF02.DBF
11 ONLINE F:/JACKYINDEX01.DBF
已选择11行。
SQL> alter database datafile 11 offline drop;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> drop tablespace jacky_index including contents;
表空间已删除。
SQL> col tablespace_name for a30
SQL> select tablespace_name,status from user_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
JINLIAN ONLINE
JINLIAN_UNDO ONLINE
JINLIAN_INDEX ONLINE
JINLIAN1_UNDO ONLINE
JINLIAN_TEMP ONLINE
HFTB ONLINE
已选择11行。
SQL> --用另外一个数据字典来确认;
SQL> select file#,status from v$datafile;
FILE# STATUS
---------- -------
1 SYSTEM
2 ONLINE
3 ONLINE
4 ONLINE
5 ONLINE
6 ONLINE
7 ONLINE
8 ONLINE
9 ONLINE
10 ONLINE
已选择10行。
4.3下面就是重新创建索引表空间和索引了;
上面我提到将创建索引表空间和索引的语句保留在一个文本中,这样直接就可以运行创了。
当手动创建也可以,但是实际的数据库中 ,这种索引可能很多,所有还是保留在文本比较好。
以后的操作网友可以自己操作试试,呵呵!