PMQ 2015-10-29
2015-11-3第一次修改
2016-06-14 第二次修改 现在发现,无论是什么软件。都离不开数据库的操作。又需要重新学习数据库。这次更新加了目录。
第一章 Oracle 基本知识与 SQL*PLUS 环境
1、创建数据库
开始→程序→Oracle-OraDb11g-home1→配置和移植工具→Database Configuration Assistant 数据库名称和密码需要设置以外,其他的选项都是直接“下一步”。
2、打开运行程序
开始→运行→sqlplus /nolog
3、连接数据库
conn / as sysdba;
4、解锁scott用户、修改其密码(这一步只是熟悉操作,做不做没关系)
Alter user scott account unlock ;
conn scott / tiger ;
5、修改语言
美式英语: alter session set nls_language='AMERICAN';
简体中文: alter session set nls_language='SIMPLIFIED CHINESE';
修改语言主要是日期的格式的不一致,可以用命令
select sysdate from dual;
查看当前日期,并且比较两种语言的不同。
这个知识在接下来实验中对表插入日期数据会涉及到。
6、两张表——DEPT 、 EMP
这两张表是接下来几次实验要用的,所以要先创建好。做实验过程中,要多数据处理,我们知道表的内容就能更好地操作了。
注意:在插入数据之前一定要写命令
alter session set nls_language='AMERICAN';
因为插入的日期是美式日期。
DROP TABLE DEPT;
CREATE TABLE DEPT
(DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14) ,
LOC VARCHAR2(13) ) ;
DROP TABLE EMP;
DROP TABLE EMP;
CREATE TABLE EMP
(EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87')-85,3000,NULL,20);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,to_date('13-JUL-87')-51,1100,NULL,20);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
第二章 数据表的创建
1.创建如下三个基表:
S(S#,SNAME,AGE,SEX) 对应的中文为:
[学生(学号,姓名,年龄,性别)]
SC(S#,C#,GRADE) 对应的中文为:
[学习(学号,课程号,成绩)]
C(C#,CNAME,TEACHER)对应的中文为:
[课程(课程号,课程名,任课教师)]
注:以后的实验要用到这三个基本表
create table s
(
s number(10) not null primary key,
sname varchar2(10),
age number(3),
sex varchar2(10)
);
describe s;
create table c
(
c number(10) not null primary key,
cname varchar2(10),
teacher varchar2(10)
);
describe c;
create table sc
(
s number(10) not null references s(s),
c number(10) not null references c(c),
grade number(3),
primary key(s,c)
);
describe sc;
2.生成一个数据表 PROJECTS,其字段定义如下,其中 PROJID 是主键并且要求
P_END_DATE 不能比 P_START_DATE 早。
字段名称 数据类型 长度
PROJID NUMBER 4
P_DESC VARCHAR2 20
P_START_DATE DATE
P_END_DATE DATE
BUDGET_AMOUNT NUMBER 7,2
MAX_NO_STAFF NUMBER 2
create table projects
(
projid number(4) not null primary key,
p_desc varchar2(20),
p_start_date date,
p_end_date date,
budget_amount number(7,2),
max_no_staff number(2),
check(p_start_date < p_end_date)
);
describe projects;
3.生成一个数据表 ASSIGNMENTS, 其字段定义如下, 其中 PROJID 是外键引自 PROJECTS数据表,EMPNO 是数据表 EMP 的外键,并且要求 PROJID 和 EMPNO 不能为 NULL。
字段名称 数据类型 长度
PROJID NUMBER 4
EMPNO NUMBER 4
A_START_DATE DATE
A_END_DATE DATE
BILL_RATE NUMBER 4,2
ASSIGN_TYPE VARCHAR2 2
create table assignments
(
projid number(4) not null references projects(projid),
empno number(4) not null references EMP(EMPNO),
a_start_date date,
a_end_date date,
bill_rate number(4,2),
assign_type varchar2(2),
primary key(projid,empno)
);
describe assignments;
4、用 DESCRIBE 命令查看 1 和 2 题定义的字段。
describe s;
describe c;
describe sc;
describe projects;
5、给 1 题中的 PROJECTS 数据表增加一个 COMMENTS 字段,其类型为 LONG。给 2 题中的 ASSIGNMENTS 数据表增加一个 HOURS 字段,其类型为 NUMBER。
alter table projects add (comments long);
alter table assignments add (hours number(6));
第三章 数据插入、修改和删除
1、用 INSERT 命令输入数据
表 3-1 基本表 S 的数据
S1 WANG 20 M
S2 LIU 19 M
S3 CHEN 22 M
S4 WU 19 M
S5 LOU 21 F
S8 DONG 18 F
表 3-2 基表 C 的数据
C2 MATHS MA
C4 PHYSICS SHI
C3 CHEMISTRY ZHOU
C1 DB LI
C5 OS WEN
表 3-3 基本表 SC 的数据(空格为未选修)
C# S# S1 S2 S3 S4 S5 S8
C1 80 85 90 75 70 90
C2 70 NULL 85 60 NULL
C3 85 95 NULL 80 90
C4 90 NULL 70
C5 70 65 NULL
insert into s values('1','WANG','20','M');
insert into s values('2','LIU','19','M');
insert into s values('3','CHEN','22','M');
insert into s values('4','WU','19','M');
insert into s values('5','LOU','21','F');
insert into s values('8','DONG','18','F');
insert into c values('2','MATHS','MA');
insert into c values('4','PHYSICS','SHI');
insert into c values('3','CHEMISTRY','ZHOU');
insert into c values('1','DB','LI');
insert into c values('5','OS','WEN');
insert into sc values('1','1','80');
insert into sc values('2','1','85');
insert into sc values('3','1','90');
insert into sc values('4','1','75');
insert into sc values('5','1','70');
insert into sc values('8','1','90');
insert into sc values('1','2','70');
insert into sc values('2','2',NULL);
insert into sc values('3','2','85');
insert into sc values('5','2','60');
insert into sc values('8','2',NULL);
insert into sc values('1','3','85');
insert into sc values('3','3','95');
insert into sc values('4','3',NULL);
insert into sc values('5','3','80');
insert into sc values('8','3','90');
insert into sc values('1','4','90');
insert into sc values('2','4',NULL);
insert into sc values('4','4','70');
insert into sc values('1','5','70');
insert into sc values('5','5','65');
insert into sc values('8','5',NULL);
select * from s;
select * from c;
select * from sc;
2、对 S 、C 、SC 表进行操作:
1) 、把 C2 课程的非空成绩提高 10%。
2) 、在 SC 表中删除课程名为 PHYSICS 的成绩的元组。
3) 、在 S 和 SC 表中删除学号为 S8 的所有数据。
update sc set grade='100'
where c='2' and grade >=91;
update sc set grade=1.1*grade
where c='2' and grade <91;
delete from sc where c='4';
delete from sc where s='8';
delete from s where s='8';
3、在 PROJECTS 数据库表中增加下列记录:
PROJID 1 2
P_DESC WRITE C030 COURSE PROOF READ NOTES
P_START_DATE 02-JAN-88 01-JAN-
P_END_DATE 07-JAN-88 10-JAN-
BUDGET_AMOUNT 500 600
MAX_NO_STAFF 1 1
COMMENTS BR CREATIVE YOUR CHOICE
alter session set nls_language='AMERICAN';
insert into projects values('1','WRITE C030 COURSE ','02-JAN-88','07-JAN-88','500','1','BR CREATIVE');
insert into projects values('2','PROOF READ NOTES ','01-JAN-','10-JAN-','600','1','YOUR CHOICE');
4、在 ASSIGNMENTS 数据库表中增加下列记录:
PROJID 1 1 2
EMPNO 7369 7902 7844
A_START_DATE 01-JAN-88 04-JAN-88 01-JAN-
A_END_DATE 03-JAN-88 07-JAN-88 10-JAN-
BILL_RATE 50.00 55.00 45.50
ASSIGN_TYPE WR WR PF
HOURS 15 20 30
insert into assignments values('1','7369','01-JAN-88','03-JAN-88','50.00','WR','15');
insert into assignments values('1','7902','04-JAN-88','07-JAN-88','55.00','WR','20');
insert into assignments values('2','7844','01-JAN-','10-JAN-','45.50','PF','30');
5、把 ASSIGMENTS 表中 ASSIGNMENT TYPE 的 WR 改为 WT,其他的值不变
update assignments set assign_type='WT' where assign_type='WR';
6、在 PROJECTS 和 ASSIGNMENTS 插入更多的记录。
7、删除自己随意插入的记录。
注意:在插入数据到表assignments 的时候一定要保证员工号是已经存在,不然的话需要自己插入数据到表EMP。下面的7788这个员工号是已经存在的。
insert into assignments values('1','7788','20-JAN-88','26-JAN-88','50.00','WR','10');
delete from assignments where projid='1' and empno='7788';
第四章 数据查询
对 Oracle 数据库基本表 EMP 和 和 DEPT 操作:
1、查询一个在部门 10 中的所有工作岗位的唯一列表,在输出中包括部门的地点。
select distinct JOB,LOC from DEPT,EMP
where EMP.DEPTNO='10' and DEPT.DEPTNO = EMP.DEPTNO;
2、列出工资在 1000 到 2000 之间的所有员工的 ENAME,DEPTNO,SAL。
select ENAME,DEPTNO,SAL from EMP
where SAL between 1000 and 2000;
3、显示 DEPT 表中的部门号和部门名称,并按部门名称排序。
select DEPTNO,DNAME from DEPT order by DNAME;
注:虽然题目没有要求按照升序或者降序排列,但是默认是升序。在此句的末尾加上desc就是指明降序排列,acs是升序排列。
4、显示所有不同的工作类型。
select distinct JOB from EMP ;
5、列出部门号在 10 到 20 之间的所有员工,并按名字的字母排序。
select ENAME from EMP
where DEPTNO between 10 and 20 order by ENAME;
6、列出部门号是 20,工作是职员的员工。
select ENAME from EMP
where DEPTNO='20' and JOB='CLERK';
7、显示名字中包含 TH 和 LL 的员工名字。
select ENAME from EMP
where ENAME like '%TH%' or ENAME like '%LL%';
8、显示所有员工的名字(Ename)和报酬(Remuneration) 。
select ENAME,SAL from EMP;
9、显示在 1983 年中雇佣的员工。
--第一种写法,网上找的,其实不太正确
select ENAME from EMP where HIREDATE like '%83';
--第二种写法
alter session set nls_language='AMERICAN';
select ENAME from EMP where HIREDATE >='01-Jan-1983' and HIREDATE < '01-Jan-1984';
10、查询每个部门的平均工资。
SELECT JOB,AVG(SAL) from EMP GROUP BY JOB;
11、查询出每个部门中工资最高的职工。
SELECT ENAME,SAL,DEPTNO FROM EMP
WHERE SAL IN
(SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO) ;
12、查询出每个部门比平均工资高的职工人数。
SELECT DEPTNO,COUNT(SAL) FROM EMP WHERE SAL> (SELECT AVG
(SAL) FROM EMP) GROUP BY DEPTNO;
第五章视图、索引、序列和权限设置
对基本表 S 、C 和 和 SC 操作
1、建立男学生的视图,属性包括学号、姓名、选修课程和成绩。
create view m_stu(sno,sname,cname,grade)
as select s.s,s.sname,c.cname,sc.grade from s,c,sc
where s.s=sc.s and c.c=sc.c and s.sex='M';
select * from m_stu;
2、在男学生视图中查询平均成绩大于 80 分的学生学号和姓名。
select distinct sno,sname,AVG(grade) avg_grade from m_stu
where sno in (select sno from m_stu)
group by sno,sname having AVG(grade) >80 ;
3、撤消生成的视图。
drop view m_stu;
4、创建一个新用户 NEWUSER。
CREATE USER NEWUSER IDENTIFIED BY MY;
5、使用 GRANT 语句,把对基本表 S、C、SC 的使用权限授给 NEWUSER 用户。
GRANT select,insert,delete,update on s to NEWUSER;
GRANT select,insert,delete,update on c to NEWUSER;
GRANT select,insert,delete,update on sc to NEWUSER;
6、使用 REVOKE 语句从 NEWUSER 手中收回基本表 S、C、SC 的使用权。
revoke all on s from NEWUSER;
revoke all on c from NEWUSER;
revoke all on sc from NEWUSER;
7、删除用户 NEWUSER。
drop user NEWUSER;
8、对基本表 S 按照 S#生成一个索引。
9、对基本表 C 按照 C#生成一个索引。
10、删除基本表 C 建立的索引。
在S(S)和C(C)上创建索引,会产生错误,是因为在建立PRIMARY KEY约束时已经创建了索引。所以8和9出错是正常的。
第六章 PL/SQL
注意:在输入完成后记得加 / 符号,类似 ; 的作用,代表输入结束。
对基本表 EMP 操作:
1、用 PL/SQL 的存储过程删除雇员为 7788 的雇员
CREATE OR REPLACE PROCEDURE fire_emp
(v_emp_no IN emp.empno%type)
IS
BEGIN
DELETE FROM EMP WHERE empno = v_emp_no;
END fire_emp;
/
EXECUT fire_emp(7788);
注:%type的作用是让定义的变量v_emp与emp.empno的类型匹配。
2、用带输入输出参数的存储过程查询出任意给定雇员号的的薪水。
CREATE OR REPLACE PROCEDURE query_sal
(v_emp_no IN emp.empno%type,
v_emp_name OUT emp.ename%type,
v_emp_sal OUT emp.sal%type)
IS
BEGIN
SELECT ename, sal
INTO v_emp_name, v_emp_sal
FROM EMP WHERE empno = v_emp_no;
END query_sal;
/
VARIABLE emp_name varchar2(15);
VARIABLE emp_sal number;
EXECUTE query_sal(7654,:emp_name, :emp_sal);
print emp_sal;
3、用函数做第 2 题。
CREATE OR REPLACE FUNCTION get_sal
(v_emp_no IN emp.empno%type)
RETURN number
IS
V_emp_sal emp.sal%type := 0;
BEGIN
SELECT sal INTO v_emp_sal
FROM EMP WHERE empno = v_emp_no;
RETURN (v_emp_sal);
END get_sal;
/
VARIABLE emp_sal number;
EXECUTE :emp_sal := get_sal(7654)
PRINT emp_sal;
第七章 触发器和游标
对基本表 EMP\\DEPT 进行操作:
1、用显式游标对基本表 EMP 查询信息。
----显式游标就是有声明游标的,如DECLARE Cursor c1
DECLARE
Cursor c1 IS
SELECT ename, sal, hiredate FROM emp
WHERE deptno = 20 AND job = 'ANALYST';
v_ename VARCHAR2(10);
v_sal NUMBER(7,2);
v_hiredate date;
begin
OPEN c1;
FETCH c1 INTO v_ename, v_sal, v_hiredate;
CLOSE c1;
end;
/
2、用隐式游标对基本表 DEPT 查询信息。
DECLARE
dno number(2);
name varchar2(14);
addr varchar2(13);
BEGIN
SELECT DEPTNO,DNAME,LOC
INTO dno,name,addr from DEPT
where DEPTNO=20;
end;
/
3、生成一个基本表 DEPT 触发器, 如果增加一个新的部门同时在基本表 EMP 中也增加一条有相同部门但雇员号为自己学号的记录。
直接输入代码的话,会出现一下错误。
040:"无法对sys拥有的对象创建触发器"
解决的办法是新建一个用户,再把SYS的EMP和DEPT两张表复制到该用户的目录。
新创建一个用户(用户名pmq密码是52091234),pmq是我的名字,请读者别复制。读者在看到pmq三个字母就替换为自己创建的用户。纯数字密码可能会提示错误,用字母+数字的密码。下面的数字2072是我的学号,意思就是在添加一个部门的时候就把我加进去。读者请更改为自己的学号,位数是4位数(表在定义的时候把员工号定义为4位数字)。
conn / as sysdba;
create user pmq identified by 52091234;
grant dba to username;
conn pmq/52091234
CREATE TABLE pmq.DEPT AS SELECT * FROM sys.DEPT;
CREATE TABLE pmq.EMP AS SELECT * FROM sys.EMP;
CREATE OR REPLACE TRIGGER TRI11
AFTER INSERT ON DEPT
FOR EACH ROW
BEGIN
INSERT INTO EMP (EMPNO,DEPTNO ) values ('2072',:new.DEPTNO);
END;
/
测试数据
INSERT INTO DEPT VALUES (50,'COMPUTER','SHANGHAI');
SELECT EMPNO,DEPTNO FROM EMP WHERE DEPTNO=50;
4、生成一个基本表 EMP 触发器, 如果删除一个部门时, 同时也在基本表 DEPT 中删除该部门的相关信息。
CREATE OR REPLACE TRIGGER TRI22
AFTER DELETE ON EMP
FOR EACH ROW
BEGIN
DELETE FROM DEPT WHERE DEPTNO=:old.deptno;
END;
/
试验数据
delete from EMP WHERE DEPTNO=50;
SELECT DEPTNO,DNAME,LOC FROM DEPT WHERE DEPTNO=50;
5、删除生成的触发器。
DROP TRIGGER TRI11;
DROP TRIGGER TRI22;
注意:
(1)要理解第三题和第四题中的new和old所代表的意思和用法。大致可以理解为new是在新插入数据的时候选择新数据,old是删除数据时选择被删除的数据(也就是旧的数据)。
(2)for each row的含义是执行的级别是行,如果不加这一句是默认级别是表。
第九章 Oracle 备份与恢复
注意:
1、对数据库进行热备和冷备
做实验之前,要知道什么是热备,什么是冷备。
冷备:备份的时候把数据文件、控制文件、日志文件全部拷贝到其他地方。恢复过程就是把文件再拷回来,再把日志文件恢复。
热备:备份的时候把数据文件、控制文件、日志文件全部拷贝到其他地方。恢复过程中先在备份的文件中复制回丢失的文件(更新的数据是没有的),然后利用恢复系统把文件更新。
首先,我要解释一下。我的oracle是安装目录为H:/oracle,大家在做的时候要按照自己的实际的目录来写代码。我在H盘新建了一个database文件夹,里面含有一个cold文件夹。coldbak.sql文件我放在了H:/database目录下。要想成功运行下面的代码,必须有正确的文件路径。
冷备份的操作:
1、新建一个coldbak.sql的文件,在里面写入代码:
conn / as sysdba;
shutdown immediate;
$copy H:\\oracle\\oradata\\pmq\\*.dbf H:\\database\\cold;
$copy H:\\oracle\\oradata\\pmq\\*.ctl H:\\database\\cold;
$copy H:\\oracle\\oradata\\pmq\\*.log H:\\database\\cold;
startup;
注:其实代码的含义就是从H:\\oracle\\oradata\\pmq目录把所有的dbf、ctl、log文件复制到H:\\database\\cold。
2、然后在SQL 里输入:
connect / as sysdba;
drop table test_1;
create table test_1(id int);
insert into test_1 values(999);
commit;
@'H:\\database\\coldbak.sql';
路径一定要正确, 否则无法打开文件。我的coldbak.sql是放在H盘的database文件夹中的。路径的逗号不能少。
insert into test_1 values(888);
commit;
select * from test_1;
shutdown immediate;
3、手动删除H:\\oracle\\oradata\\pmq里的所有文件。这个的安装路径大家都有所不同。但是一定要找到oradata文件夹。里面放的是数据库的内容,我的数据库名称是pmq。里面有USERS01.DBF、UNDOTBS01.DBF等文件。
4、startup
shutdown immediate;
$copy H:\\database\\cold\\*.* H:\\oracle\\oradata\\pmq;
---上面这一句的意思就是从H:\\database\\cold\路径中把所有的文件复制到H:\\oracle\\oradata\\pmq。H:\\database\\cold\是我文件备份的地方,H:\\oracle\\oradata\\pmq是我数据库的位置。
5、startup ;
-----会发现出现一下错误,两个控制文件不一致。
解决办法是:把H:\\oracle\\oradata\\pmq里的CONTROL01.CTL复制到H:\\oracle\\flash_recovery_area\\pmq,删掉里面的CONTROL02.CTL,将CONTROL01.CTL改名为CONTROL02.CTL。
6、shutdown immediate;
connect / as sysdba;
startup ;
select * from test_1;
----数据库恢复到了备份时的状态。
热备的操作:(做热备前先做冷备)
1、
connect / as sysdba;
drop table test_2;
create table test_2(a int) tablespace users;
insert into test_2 values(111);
commit;
shutdown immediate;
startup mount;
alter database archivelog ;
@'H:\\database\\coldbak.sql';
执行coldbak.sql,其实就是在拷贝文件,所以热备冷备都一样。
insert into test_2 values(222);
commit;
select * from test_2;
alter system switch logfile;
alter system switch logfile;
shutdown immediate;
2、手动删除数据库中的USERS01.DBF文件
3、
startup
select * from v$recover_file;
执行这个操作以后可以看到4 online。我操作时显示的是4,所以下面都是写4。
alter database datafile 4 offline drop;
alter database open;
4、手动复制文件:从备份目录中把删除的文件USERS01.DBF复制到数据库。也可以用类似命令$copy H:\\database\\cold\\USERS01.DBF H:\\oracle\\oradata\\pmq;
5、
recover datafile 4;
alter database datafile 4 online;
select * from test_2;
2、使用 RMAN,采用双通道技术对数据库进行全备份,生成备份文件在学生以学号命名的文件夹中。
3、使用 RMAN 进行恢复。
两个实验一起做
(1)切换服务器归档模式
connect / as sysdba;
shutdown immediate;
startup mount;
alter database archivelog ;
alter database open;
alter system archive log start;
Exit
(2)开始→运行→cmd
输入 chcp 936
----解决中文显示乱码问题,当前窗口有效
(3)
rman
connect target /
---连接数据库
(4)设置参数
configure default device type to disk;
----设置默认的备份设备为磁盘
configure device type disk parallelism 2;
----设置备份的并行级别,通道数为2
configure channel 1 device type disk format 'H:/2072/backup1/backup_%U';
configure channel 2 device type disk format 'H:/2072/backup2/backup_%U';
---设置备份的文件格式,只适用于磁盘设备
configure controlfile autobackup on;
----打开控制文件与服务器参数文件的自动备份
configure controlfile autobackup format for device type disk to
'H:/2072/backup1/ctl_%F';
----设置控制文件与服务器参数文件自动备份的文件格式
show all;
----查看所有设置
report schema;
----查看数据库方案报表
(5)采用双通道技术对数据库进行全备份,生成备份文件在学生以学号命名的文件夹中。双通道ch1,ch2。我的学号是2072,所以请替换它。以学号命名的文件夹必须手动创建好,不然会找不到路径。
run{
allocate channel ch1 type disk;
allocate channel ch2 type disk;
backup full
format 'H:/2072/database_%d_%s_%p_%t'
database include current controlfile;
sql 'alter system archive log current';
backup
format 'H:/2072/arch%d_%s_%p_%t'
archivelog all delete all input;
release channel ch1;
release channel ch2;
}
----如同这样的结果才表示没有错误。
(6)使用双通道恢复。
run{
shutdown immediate;
startup mount;
allocate channel c1 type disk;
allocate channel c2 type disk;
restore database;
recover database;
alter database open;
release channel c1;
release channel c2;
}