zoukankan      html  css  js  c++  java
  • 数据库实验四

    实验内容:

    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;
  • 相关阅读:
    SDN第一次上机作业
    期末作业验收
    SDN第5次上机作业
    个人作业——软件工程实践总结作业
    SDN第4次上机作业
    SDN第四次作业
    SDN第三次上机作业
    SDN第三次作业
    SDN第二次上机作业
    SDN第二次作业
  • 原文地址:https://www.cnblogs.com/jkzr/p/10419616.html
Copyright © 2011-2022 走看看