Chinaunix首页 | 论坛 | 博客
  • 博客访问: 894765
  • 博文数量: 101
  • 博客积分: 2256
  • 博客等级: 大尉
  • 技术积分: 1481
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-19 17:52
文章存档

2017年(1)

2013年(2)

2012年(25)

2011年(73)

分类: 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下面就是重新创建索引表空间和索引了;


上面我提到将创建索引表空间和索引的语句保留在一个文本中,这样直接就可以运行创了。
当手动创建也可以,但是实际的数据库中 ,这种索引可能很多,所有还是保留在文本比较好。
以后的操作网友可以自己操作试试,呵呵!

阅读(1595) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~