数据库实验四

实验四要求:

1.建立对应3GB大小的外部文件的tablespace tabspace_????

2.重建major_????与stud_????,指定存于建立的tabspace_????中,

3.重新产生样本值,包括千万级数据的stud表,看是否有性能上的提升。

4.用EXP导出数据与IMP导入数据,请作多种尝试,直到成功!

5.尝试对系统表空间user及自定义表空间tabspace_????进行备份与恢复。

6.登录DBA用户system,通过cat字典入口,找到以DBA_开头的相关数据字典,并且每个对象显示5条记录(SQL生成SQL)。

7.通过查找自己用户下的触发器字典,生成代码将所有触发器的状态改为disable并执行。再生成代码,将状态为disable的触发器的状态改为enable,并执行


1 首先,先建立一个表空间

1
2
create tablespace tabspace_J314 datafile 'D:\tools\oracle\oradata\orcl/four.dbf' size 3072m;
--这里前面的D:\tools\oracle\oradata\orcl为oracle安装路径

2 重建两个表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
drop table major_J314;
create table major_J314 (
MajorNo varchar2(20) primary key,
MNAME varchar2(50),
loc varchar2(20),
mdean varchar2(20),
constraint mj_loc
check (loc IN ('主校区', '南校区', '新校区', '铁道校区', '湘雅校区'))
)tablespace tabspace_J314;

drop table stud_J314;
create table stud_J314 (
SNO varchar2(20) primary key,
SNAME varchar2(20),
SEX varchar2(5),
TEL varchar2(20),
E_MAIL varchar2(20),
birthday date,
MNO varchar2(20),
MajorNo varchar2(20),
constraint sj_sex
check (sex IN ('男','女','其他')),
constraint sj_E_MAIL
check (REGEXP_LIKE (E_MAIL,'[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}'))
)tablespace tabspace_J314;

drop table student_J314;
create table student_J314(
sno char(10) primary key,
name varchar2(10),
sex varchar2(2),
tel varchar2(20),
e_mail varchar2(20),
birthday date
)tablespace tabspace_J314;

3 重新生成样本值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
insert into major_J314 values('02', '计算机科学与技术', '南校区', '张祖平');
insert into major_J314 values('03', '物联网工程', '南校区', '张祖平');
insert into major_J314 values('04', '数据科学与大数据技术', '南校区', '张祖平');

insert into stud_J314 values ('0902170314', '颜灿', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0902170314', '02');
insert into stud_J314 values ('0903170314', 'a', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0902170314', '03');
insert into stud_J314 values ('0904170314', 'b', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0904170314', '04');
--非班长学生
insert into stud_J314 values ('0902170101', '1', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0902170314', '02');
insert into stud_J314 values ('0902170102', '2', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0902170314', '02');
insert into stud_J314 values ('0902170103', '3', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0902170314', '02');
insert into stud_J314 values ('0902170104', '4', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0902170314', '02');
insert into stud_J314 values ('0902170105', '5', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0902170314', '02');
insert into stud_J314 values ('0902170106', '6', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0902170314', '02');
insert into stud_J314 values ('0902170107', '7', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0902170314', '02');
insert into stud_J314 values ('0902170108', '8', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0902170314', '02');
insert into stud_J314 values ('0902170109', '9', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0902170314', '02');

insert into stud_J314 values ('0903170101', '1', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0903170314', '03');
insert into stud_J314 values ('0903170102', '2', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0903170314', '03');
insert into stud_J314 values ('0903170103', '3', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0903170314', '03');
insert into stud_J314 values ('0903170104', '4', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0903170314', '03');
insert into stud_J314 values ('0903170105', '5', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0903170314', '03');
insert into stud_J314 values ('0903170106', '6', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0903170314', '03');
insert into stud_J314 values ('0903170107', '7', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0903170314', '03');
insert into stud_J314 values ('0903170108', '8', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0903170314', '03');
insert into stud_J314 values ('0903170109', '9', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0903170314', '03');

insert into stud_J314 values ('0904170101', '1', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0904170314', '04');
insert into stud_J314 values ('0904170102', '2', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0904170314', '04');
insert into stud_J314 values ('0904170103', '3', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0904170314', '04');
insert into stud_J314 values ('0904170104', '4', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0904170314', '04');
insert into stud_J314 values ('0904170105', '5', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0904170314', '04');
insert into stud_J314 values ('0904170106', '6', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0904170314', '04');
insert into stud_J314 values ('0904170107', '7', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0904170314', '04');
insert into stud_J314 values ('0904170108', '8', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0904170314', '04');
insert into stud_J314 values ('0904170109', '9', '男', '1', '123@qq.com', to_date('20001010', 'YYYYMMDD'), '0904170314', '04');

exec P_student_J314;

4 用EXP和IMP导入数据

1
2
3
4
5
6
7
8
9
10
11
exp U_J314/YcYyj1234 file=D:\oracle\test1.dmp tables=major_J314
exp U_J314/YcYyj1234 file=D:\oracle\test2.dmp tables=stud_J314
exp U_J314/YcYyj1234 file=D:\oracle\test3.dmp tables=student_J314
exp U_J314/YcYyj1234 file=D:\oracle\test4.dmp tables=(stud_J314,major_J314,student_J314)
drop table major_J314;
drop table stud_J314;
drop table student_J314;
imp U_J314/YcYyj1234 file=D:\oracle\test1.dmp tables=major_J314
imp U_J314/YcYyj1234 file=D:\oracle\test2.dmp tables=stud_J314
imp U_J314/YcYyj1234 file=D:\oracle\test3.dmp tables=student_J314
imp U_J314/YcYyj1234 file=D:\oracle\test4.dmp tables=(major_J314,stud_J314,student_J314)

速度上是快了不少,大概2分钟插入完成,之前是12分钟多

5 对系统表空间与自定义表空间备份维护

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
--这里就用RMAN,但是在备份时发现了错误,在noarchivelog状态无法备份,所以需要重启数据库改为archievelog模式
alter system archieve log start;
shutdown immediate;
startup mount;
alter database archivelog;
shutdown immediate;
startup;
--下一步就是备份数据库了
backup database format 'D:/tools/oracle/oradata/backup/%d_bak_%t';
backup tablespace system;
backup tablespace tabspace_J314;
--这个地方又出现一个问题,备份空间不足,tabspace_J314的大小是3G,所以我们需要给他一个大一点的空间
alter system set db_recovery_
show parameter db_recovery_file_dest

--系统空间不能脱机,所以我就恢复一下tabspace_J314
--发现一个问题是无法获得exclusive入队,查资料后发现是没改为mount状态
startup mount;
run{
restore tablespace system;
recover tablespace system;
}

6 登陆

1
2
3
4
5
spool D:\blog\table_name.txt
conn system/YcYyj1234 as sysdba
desc cat --查看字典名称列名
select 'select * from '||table_name||' where rownum<=5;' from cat where table_name like 'DBA_%';
spool off

7 修改触发器

1
2
3
4
5
6
7
8
9
select trigger_name from user_triggers;      --查看有哪些触发器

spool D:\blog\disable.txt
select 'alter trigger '||trigger_name||' disable;' from user_triggers;
spool off;

spool D:\blog\enable.txt
select 'alter trigger '||trigger_name||' enable;' from user_triggers;
spool off;