最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

ORACLE数据库实验

来源:动视网 责编:小OO 时间:2025-09-29 19:04:52
文档

ORACLE数据库实验

ORACLE数据库实验PMQ2015-10-292015-11-3第一次修改2016-06-14第二次修改现在发现,无论是什么软件。都离不开数据库的操作。又需要重新学习数据库。这次更新加了目录。第一章Oracle基本知识与SQL*PLUS环境1、创建数据库开始→程序→Oracle-OraDb11g-home1→配置和移植工具→DatabaseConfigurationAssistant数据库名称和密码需要设置以外,其他的选项都是直接“下一步”。2、打开运行程序开始→运行→sqlplus/nol
推荐度:
导读ORACLE数据库实验PMQ2015-10-292015-11-3第一次修改2016-06-14第二次修改现在发现,无论是什么软件。都离不开数据库的操作。又需要重新学习数据库。这次更新加了目录。第一章Oracle基本知识与SQL*PLUS环境1、创建数据库开始→程序→Oracle-OraDb11g-home1→配置和移植工具→DatabaseConfigurationAssistant数据库名称和密码需要设置以外,其他的选项都是直接“下一步”。2、打开运行程序开始→运行→sqlplus/nol
ORACLE数据库实验

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;

    } 

文档

ORACLE数据库实验

ORACLE数据库实验PMQ2015-10-292015-11-3第一次修改2016-06-14第二次修改现在发现,无论是什么软件。都离不开数据库的操作。又需要重新学习数据库。这次更新加了目录。第一章Oracle基本知识与SQL*PLUS环境1、创建数据库开始→程序→Oracle-OraDb11g-home1→配置和移植工具→DatabaseConfigurationAssistant数据库名称和密码需要设置以外,其他的选项都是直接“下一步”。2、打开运行程序开始→运行→sqlplus/nol
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top