- 这个吧,应付山农期末考试,除了选择题需要看好课件。理解外,其余大题简答基本类型都涵盖。期末刚考完,很全面。
- 其余学校不了解。
- 喵喵喵,前人栽树后人乘凉。老学姐爱你们~(我不是学长!)
- Oracle的后台进程主要包括:
- (1)DBWR 数据库写入进程:负责将数据库缓冲区内变动过的数据块写回磁盘内的数据文件,DBWR可有多个。
- 2)LGWR 日志文件写入进程: 负责将重做日志缓冲区内变动记录循环写回磁盘内的重做日志文件,
- (3)ARCH 归档进程(archive process): 归档进程ARCH负责在重做日志文件切换后将已经写满的重做日志文件复制到归档日志文件中,
- (4)CKPT 检查点进程:检查点是一个数据库事件,唤醒DBWR进程,
- (6)RECO 恢复进程: 在Oracle 11g分布式数据库环境中,RECO处理程序由于网络故障或系统故障挂起的分布式事务。
- (7) SMON 系统监控进程(system monitor): SMON完成例程的恢复工作 (启动实例,装载数据库,打开数据库)
- (8) PMON 进程监控进程(process monitor): 当用户进程失败时用于完成进程的恢复。
- 一个表空间对应两个数据文件,同时对段区管理
- 1 SQL> create tablespace t4
- datafile 'c:\t04.dbf'size 5000k,'c:\t05.dbf'size 5000k;
- extent management local autoallocate
- segment space management auto;
ALTER DATABASE ADD LOGFILE MEMBER 'log3a.rdo' TO GROUP 10;
【分区表】【list】列表分区
create table part_book1
2 ( bid number(4),
3 bookname varchar2(20),
4 bookpress varchar2(30),
5 booktime date)
6 partition by list(bookpress)
7 (partition part1 values('清华大学出版社') tablespace system,
8 partition part2 values('教育出版社') tablespace users);
insert into part_book1 values(2,'音乐基础欣赏','教育出版社',to_date('20120102','yyyymmdd'))
【range】范围分区
create table part_book
2 ( bid number(4),
3 bookname varchar2(20),
4 bookpress varchar2(30),
5 booktime date)
6 partition by range(booktime)
7 (partition part1 values less than (to_date('20100101','yyyymmdd'))tablespace system,
8 partition part2 values less than (to_date('20120101','yyyymmdd')) tablespace users,
9 partition part3 values less than (maxvalue) tablespace users);
完整的游标应用实例:
DECLARE varId NUMBER;
varName VARCHAR2(50);
CURSOR MyCur(v_xb xs.xb%type) IS
SELECT xh, xm FROM xs
WHERE xb=v_xb;
BEGIN OPEN MyCur('男');
FETCH MyCur INTO varId, varName;
dbms_output.put_line('学生编号:'|| varId ||'学生名:'||varName ) ;
CLOSE MyCur;
END;
DECLARE
v_xm varchar2(8):='张琼';
v_zym varchar2(10):='计算机';
v_zxf number(2):=45; /*定义变量类型*/
BEGIN
UPDATE XS SET zxf=v_zxf
WHERE xm=v_xm;
IF SQL%NOTFOUND THEN
INSERT INTO XS(XH,XM,ZYM,ZXF) VALUES('001',v_xm,v_zym,v_zxf);
END IF;
end;
补充:创建一个存储过程,以部门号为该存储过程的in类型参数,查询该部门的平均工资,并输出该部门中比平均工资高的员工号、员工名。(for 循环遍历 游标)
CREATE OR REPLACE PROCEDURE show_emp(
p_deptno emp.deptno%TYPE)
AS
v_sal emp.sal%TYPE;
BEGIN
SELECT avg(sal) INTO v_sal FROM emp WHERE deptno=p_deptno;
DBMS_OUTPUT.PUT_LINE(p_deptno||' '||'average salary is:'||v_sal);
FOR v_emp IN (SELECT * FROM emp WHERE deptno=p_deptno AND sal>v_sal) LOOP
DBMS_OUTPUT.PUT_LINE(v_emp.empno||' '||v_emp.ename);
END LOOP;
END show_emp;
例:为emp表创建一个触发器,当插入新员工时显示新员工的员工号、员工名;当更新员工工资时,显示修改前后员工工资;当删除员工时,显示被删除的员工号、员工名。
• CREATE OR REPLACE TRIGGER t3
• BEFORE INSERT OR UPDATE of sal OR DELETE ON scott.emp
• FOR EACH ROW
• BEGIN
• IF INSERTING THEN
• DBMS_OUTPUT.PUT_LINE(:new.empno||' '||:new.ename);
• ELSIF UPDATING THEN
• DBMS_OUTPUT.PUT_LINE(:old.sal||' '||:new.sal);
• ELSE
• DBMS_OUTPUT.PUT_LINE(:old.empno||' '|| :old.ename);
• END IF;
• END t3;
• 触发触发器t3
• Set serveroutput on
• declare
• begin
• update scott.emp set empno=7521 where empno=7522;
• commit;
• end;
创建概要文件
SQL> create profile p1 limit
failed_login_attempts 3
password_lock_time 7;
将概要文件分配给用户
SQL> alter user u1
profile p1;
例:删除重做日志组log1a.rdo:
ALTER DATABASE DROP LOGFILE MEMBER 'log1a.rdo';
例:删除编号为10的重做日志组:
ALTER DATABASE DROP LOGFILE GROUP 10;
2 ALTER DATABASE ADD LOGFILE ('log1c.rdo', 'log2c.rdo') SIZE 5000k;
3 ALTER DATABASE ADD LOGFILE GROUP 10 ('log1a.rdo', 'log2a.rdo') SIZE 5000k
空间,用户表空间
1.创建普通表空间
SQL> create tablespace t2
2 datafile 'c:\t02.dbf' size 5000k;
创建临时表空间
SQL> create temporary tablespace t3
2 tempfile 'c:\t03.dbf'size 5000k;
3.创建回滚表空间
SQL> create undo tablespace t4
2 datafile 'c:\t04.dbf'size 5000k;
4.创建大文件表空间
SQL> create bigfile tablespace bigtbs
2 datafile 'c:\bigtbs01.dbf' size 5000k
导入表格 SQL> $imp system/test tables=(Student,Course,SC) file=c:\tian.dmp
增加表空间容量
方法一:自动扩充
SQL> create tablespace t2
2 datafile 'c:\t02.dbf'size 5000k
3 autoextend on
4 next 500k
5 maxsize 20M;