实验内容:
1.建立对应3GB大小的外部文件的tablespace tabspace_????
create tablespace tabspace_J122 tablespace tabspace_J122;
datafile 'E:大三上大型数据库大型数据库 abspace_J122.dbf' size 4096m;
2.重建MAJOR_????与STUD_????,指定存于建立的tabspace_????中,
create table T_major1_J122
(
mno char(2) primary key,
mname varchar(20),
loc varchar(20) check(loc in('主校区','南校区','新校区','铁道校区','湘雅校区')),
mdean varchar(20)
)tablespace tabspace_J122 ;
create table T_stud1_J122
(
sno char(10) primary key,
sname varchar(20),
sex varchar(10) check(sex in('男','女','其它','其他')),
tel varchar(15),
email varchar(20) check(email like '%@%.%'),
birthday date check((TO_CHAR('yyyymmdd'))>='19990731'),
mno char(10) references T_stud_J122(sno),
majorno char(2) references T_major_J122(mno)
)tablespace tabspace_J122 ;
DROP TABLE T_studnew_j122;
CREATE TABLE T_studnew_j122(
sno CHAR(10) primary key,
sname VARCHAR2(10),
sex VARCHAR2(4),
tel VARCHAR2(15),
email VARCHAR2(30),
birthday DATE
)tablespace tabspace_J122;
3.重新产生样本值,包括千万级数据的STUD表,看是否有性能上的提升。
CREATE OR REPLACE PROCEDURE P_create_stud_j122 IS
mid PLS_INTEGER:=1;
msno CHAR(10);
mname VARCHAR2(10);
msex VARCHAR2(4);
mtel VARCHAR2(15);
memail VARCHAR2(30);
mbirthday DATE;
up PLS_INTEGER:=10322736;
yy PLS_INTEGER;
mm PLS_INTEGER;
dd PLS_INTEGER;
rand_sex PLS_INTEGER;
rand_eml varchar2(30);
CURSOR c_name IS (SELECT namex FROM T_namex_j122);
BEGIN
OPEN c_name;
FOR ab IN 1..80 LOOP EXIT WHEN mid>up;
FOR cd IN 1..90 LOOP EXIT WHEN mid>up;
FOR ef IN 1..50 LOOP EXIT WHEN mid>up;
FOR gh IN 1..32 LOOP EXIT WHEN mid>up;
-- SNO
msno:= TO_CHAR(ab,'FM09')||TO_CHAR(cd,'FM09')||'16'||TO_CHAR(ef,'FM09')||TO_CHAR(gh,'FM09');
-- NAME
FETCH c_name INTO mname;
-- SEX
rand_sex:=DBMS_RANDOM.VALUE(1,100);
IF rand_sex<=40 THEN msex:='男';
ELSIF rand_sex<=99 THEN msex:='女';
ELSE msex:='其他';
END IF;
-- EMAIL
rand_eml:=DBMS_RANDOM.STRING('X',10);
memail:=rand_eml||'@163.com';
-- TEL
mtel:=ab||cd||ef||gh;
-- BIRTH
yy:=dbms_random.value(1994,1999);
IF yy<1999 THEN
mm:=dbms_random.value(1,12);
ELSE mm:=dbms_random.value(1,7);
END IF;
IF mm=2 AND ((0=yy mod 4 AND 0!=yy mod 100) OR 0=yy mod 400)THEN
dd:=dbms_random.value(1,29);
ELSIF mm=2 THEN
dd:=dbms_random.value(1,28);
ELSIF mm=1 OR mm=3 OR mm=5 OR mm=7 OR mm=8 OR mm=10 OR mm=12 THEN
dd:=dbms_random.value(1,31);
ELSE dd:=dbms_random.value(1,30);
END IF;
mbirthday:=TO_DATE(yy||TO_CHAR(mm,'FM09')||TO_CHAR(dd,'FM09'),'yyyymmdd');
-- 插入数据
INSERT INTO T_studnew_j122(sno,sname,sex,email,tel,birthday)
VALUES (msno,mname,msex,memail,mtel,mbirthday);
mid:=mid+1;
END LOOP;
END LOOP;
END LOOP;
END LOOP;
CLOSE c_name;
END;
.
/
exec P_create_stud_j122;
4.用EXP导出数据与IMP导入数据,请作多种尝试,直到成功!
exp U_J122/U_J123@orcl file=E:大三上student.dmp full=y
drop table name;
imp U_J122/U_J123@orcl file=E:大三上student.dmp fromuser = yjs touser = U_J122 commit=y
select * from name;
5.尝试对系统表空间user及自定义表空间tabspace_????进行备份与恢复
6.登录DBA用户system,通过cat字典入口,找到以DBA_开头的相关数据字典,并且每个对象显示5条记录(SQL生成SQL)。
/*dba_开头的是查全库所有的,all_开头的是查当前用户可以看到的,user_开头的是查当前用户的,后面可接_users _tables _tablespaces _objects*/
desc cat
select table_name from cat where table_name like 'dba_%';
select table_name from cat;
select 'select * from '||table_name||' where rownum<=5;' from cat;
7.通过查找自己用户下的触发器字典,生成代码将所有触发器的状态改为disable并执行。再生成代码,将状态为disable的触发器的状态改为enable,并执行。
connect U_J122/U_J123;
select 'alter trigger '||object_name||' disable;' from user_objects where OBJECT_type='TRIGGER' ;
select 'alter trigger '||object_name||' enable;' from user_objects where OBJECT_type='TRIGGER';
alter trigger TG_T_ATTEND_J122 disable;
alter trigger TG_T_ATTEND_J122 enable;