数据库学习记录01

1、创建数据库

create pluggable database lspdb admin user ls identified by 123
file_name_convert=('/home/oracle/app/oracle/oradata/orcl/pdbseed/','
/home/oracle/ app/oracle/oradata/orcl/lspdb');\|

在这里插入图片描述

2、给管理员赋予权限:

>   alter session set container=lspdb;
>   alter database open;
>   grant dba to ls;

在这里插入图片描述

3、在christpdb数据库中创建了表空间USER01,表空间USER02,表空间USER03,表空间USER04

>   create tablespace
>   space1
>   datafile '/home/oracle/app/oracle/oradata/orcl/lspdb/space1.dbf'
>   size 150M
>   autoextend on next 50m
>   maxsize unlimited;
>   create tablespace
>   space2
>   datafile '/home/oracle/app/oracle/oradata/orcl/lspdb/space2.dbf'
>   size 150M
>   autoextend on next 50m
>   maxsize unlimited;
>   create tablespace
>   space3
>   datafile '/home/oracle/app/oracle/oradata/orcl/lspdb/space3.dbf'
>   size 150M
>   autoextend on next 50m
>   maxsize unlimited;
>   create tablespace
>   space4
>   datafile '/home/oracle/app/oracle/oradata/orcl/lspdb/space4.dbf'
>   size 150M
>   autoextend on next 50m
>   maxsize unlimited;

在这里插入图片描述

4、查看数据库的使用情况,即查看表空间的数据库文件,以及每个文件的磁盘占用情况;

SELECT tablespace\_name,FILE\_NAME,BYTES/1024/1024 MB,
MAXBYTES/1024/1024 MAX\_MB,autoextensible FROM dba_data_files 
WHERE tablespace_name='USERS';
SELECT a.tablespace_name "表空间名",Total/1024/1024 "大小MB",
free/1024/1024 "剩余MB",( total - free )/1024/1024 "使用MB",
Round(( total - free )/ total,4)\* 100 "使用率%"
from (SELECT tablespace\_name,Sum(bytes)free
FROM dba_free_space group BY tablespace_name)a,
(SELECT tablespace\_name,Sum(bytes)total FROM dba_data_files 
group BYtablespace_name)b
where a.tablespace_name = b.tablespace_name;

在这里插入图片描述

5、创建表:

create table classbase (
	classid varchar2(20) not null primary key,
	classname varchar2(20) not null,
	credit varchar2(50) not null
)TABLESPACE space1;

create table objectbase (
	objectid varchar2(20) not null primary key,
	objectname varchar2(20) not null**
)TABLESPACE space1;

create table userlogin(
	userid varchar2(20) not null primary key,
	password varchar2(20) not null,
	usertype varchar(10) not null,
)TABLESPACE space1;

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210303131038927.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xzY2xhc3NpY3M=,size_16,color_FFFFFF,t_70#pic_center

create table userbase(
	userid varchar2(20) not null,
	studentid varchar2(20) not null primary key,
	name varchar2(20) not null,
	subject varchar2(20) not null,
	year\_DATE DATE NOT NULL
	classid varchar2(20) not null,
	CONSTRAINT userbase\_ classbase \_fk1 FOREIGN KEY(classid) REFERENCESclassbase (classid)
	)partition by range (year\_DATE)
	(
	partition p1 values LESS THAN (TO\_DATE(' 2018-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')) tablespace space1,
	partition p2 values LESS THAN (TO\_DATE(' 2019-01-01 00:00:00', 'SYYYY-MM-DD
HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) tablespace space2,
	partition p3 values LESS THAN (TO\_DATE(' 2020-01-01 00:00:00', 'SYYYY-MM-DD
HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) tablespace space3,
	partition p4 values LESS THAN (MAXVALUE) tablespace space4
);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rAmQZ0Ym-1614747020214)(media/5e1fdf81d03fb3b9734d1fe7749d496f.png)]

create table objectrelative (
	objectid varchar2(20) not null,
	studentid varchar2(20) not null,
	result varchar2(20) not null,
	score varchar2(5) not null,
	nopass varchar2(5) not null,
CONSTRAINT objectrelative \_ objectbase \_fk1 FOREIGN KEY (objectid)
REFERENCES objectbase (objectid),
CONSTRAINT objectrelative \_ objectbase \_fk1 FOREIGN KEY (studentid)
REFERENCES userbase (studentid)
)tablespace space1;

在这里插入图片描述

分别创建两个用户user1和user2,并授权和分配表空间space1;

create user user1 IDENTIFIED by 123;
create user user2 IDENTIFIED by 123;
alter user user1 quota unlimited on space1;
alter user user2 quota unlimited on space1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4wYXvOZt-1614747020215)(media/079a807cdfa3ab6bc88e908b0ec1d090.png)]
创建两个角色cb_role1,cb_role2,并分别赋予cb_role1,cb_role2读任何表和读、修改任何表的权利;

>   create role role1;
>   create role role2;
>   grant select any table to role1;
>   grant select any table to role2;
>   grant update any table to role2;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QYoAumV1-1614747020216)(media/97e74f4de3e40e1eb957151708d18f43.png)]

4、将cb_role1,cb_role2分别赋予给用户cb_user1,cb_user2:

>   grant role1 to user1;
>   grant role2 to user2;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2hyqZxxP-1614747020217)(media/df0d2007b4dc7f407cb49cf556049701.png)]

**5、**向表中插入数据:

declare
	dt date;
	dan_no char(5);
	zhan_no char(5);
	dan_class char(15);
	exit\_ char(20);
	price float;
begin

	insert into classbase (classid ,classname ,credit) values
	('1001','软工1班','计算机');
	insert into classbase (classid ,classname ,credit) values
	('1002','软工2班','计算机');
	insert into classbase (classid ,classname ,credit) values
	('1003','软工3班','计算机');
	insert into classbase (classid ,classname ,credit) values
	('1005','学前3班','教育');
	insert into classbase (classid ,classname ,credit) values
	('1006','学前2班','教育');
	insert into classbase (classid ,classname ,credit) values
	('1004','学前1班','教育');
	insert into objectbase (objectid,objectname) values ('0005','马克思');
	insert into objectbase (objectid,objectname) values ('0006','毛概');
	insert into objectbase (objectid,objectname) values ('0007','历史');
	insert into objectbase (objectid,objectname) values ('0011','离散');
	insert into objectbase (objectid,objectname) values ('0012','概率');

for i in 1..50000
loop
	if i mod 3 =0 then
		dt:=to_date('2018-01-01','yyyy-mm-dd')+(i mod 60);
	--PARTITION_2018
	elsif i mod 6 =1 then
		dt:=to_date('2019-01-01','yyyy-mm-dd')+(i mod 60);
	--PARTITION_2019
	elsif i mod 6 =2 then
	dt:=to_date('2020-01-01','yyyy-mm-dd')+(i mod 60);
--PARTITION_2020
end if;
	dan\_no := i;
	zhan\_no := case i mod 6 when 0 then '1001' when 1 then '1002' when 2 then
'1003' when 4 then '1004' else '1005'end;
	dan_class := CASE i MOD 6 WHEN 0 THEN '马克思' WHEN 1 THEN '毛概' WHEN 2
THEN'历史'WHEN 3 THEN '离散' ELSE '概率' END;
exit\_ := CASE i MOD 2 WHEN 0 THEN '是' ELSE '否' end;
price := dbms_random.value(5,30);
insert into userbase (dan_no,zhan_no,dan_class,exit_,price,dan_date) 
values (dan\_no,zhan\_no,dan_class,exit_,price,dt);
end loop;
end;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f296vKfl-1614747020218)(media/3209ac5155ad053492336d915c805db7.png)]

6、连接验证:让user1连接数据库lspdb,让其查看ls的userbase表

grant connect to user1;
grant connect to user2;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k9ppcCeb-1614747020219)(media/a4c368df2d34d3ed81aa264d5d2b1db7.png)]

SELECT * FROM CLASSBASE;
SELECT * FROM USERBASE;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pgKhU4MD-1614747020219)(media/0fe965b66e9af95890284c691264eac3.png)]

userbase表中的year_DATE字段根据时间段的不同,将其放在了不同的表空间里面,验证表空间使用情况如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mj8UjhYK-1614747020220)(media/191ce9bed2bfac0cc4e1d9135cf3e9bd.png)]

7、 包的建立

建立一个程序包,里面有一个函数和一个存储过程,其功能分别为:统计一段时间内的挂号总收入;统计一段时间内,各个用户表的挂号数。具体过程如下:

create or replace PACKAGE function1 IS
FUNCTION Get_TOTAL(dt1 char,dt2 char) RETURN NUMBER;
PROCEDURE get_people(dt1 char,dt2 char);
END function1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KdbfevhQ-1614747020221)(media/f986c8ec292234648a06aa7634c69466.png)]

create or replace PACKAGE BODY function1 IS
FUNCTION Get_TOTAL(dt1 char,dt2 char) RETURN NUMBER
AS
N NUMBER;
BEGIN

select sum(price) into N from WEIXIUDAN where DAN_DATE >=
to_date(dt1,‘yyyy-mm-dd hh24:mi:ss’)

and DAN_DATE <= to_date(dt2,‘yyyy-mm-dd hh24:mi:ss’);
RETURN N;
END;
PROCEDURE get_people(dt1 char,dt2 char)
AS
a1 NUMBER;
b1 NUMBER;
c1 NUMBER;
d1 NUMBER;
e1 NUMBER;
f1 NUMBER;
cursor cur is

select * from WEIXIUDAN where DAN_DATE >= to.date(dt1,‘yyyy-mm-dd
hh24:mi:ss’)

and DAN_DATE <= to_date(dt2,‘yyyy-mm-dd hh24:mi:ss’);
begin
a1 := 0;
b1 := 0;
c1 := 0;
d1 := 0;
e1 := 0;
f1 := 0;
–使用游标

for v in cur
LOOP
if v.dan_class = '马克思’
then a1 := a1 + 1;
elsif v.dan_class = '毛概’
then b1 := b1 + 1;
elsif v.dan_class = '历史’
then c1 := c1 + 1;
elsif v.dan_class = '离散’
then d1 := d1 + 1;
elsif v.dan_class = '概率’
then e1 := e1 + 1;
end if;
END LOOP;
DBMS_OUTPUT.PUT_LINE(‘马克思为:’ || a1);
DBMS_OUTPUT.PUT_LINE(‘毛概为:’ || b1);
DBMS_OUTPUT.PUT_LINE(‘历史为:’ || c1);
DBMS_OUTPUT.PUT_LINE(‘离散为:’ || d1);
DBMS_OUTPUT.PUT_LINE(‘概率为:’ || e1);
end;

END function1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XzvxpXna-1614747020222)(media/1430619a41e7eeaa0a30aa79fa0773da.png)]

8、备份

8.1. 开始全备份

步骤1:cat rman_level0.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aA0RLNL1-1614747020223)(media/e23e052a3807dc0ff9ed58c3017be437.png)]

步骤2:./rman_level0.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8cDanKRh-1614747020224)(media/7f9a8c6366b7cdda6ca30ed82b62fa42.png)]

8.2 查看备份文件

  • *.log是日志文件
  • dblv0*.bak是数据库的备份文件
  • arclv0*.bak是归档日期的备份文件
  • c-1392946895-20191120-01是控制文件和参数的备份

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zh0qXLn3-1614747020225)(media/e23e052a3807dc0ff9ed58c3017be437.png)]

8.3 查看备份文件的内容

rman target /

RMAN> list backup;

在这里插入图片描述
在这里插入图片描述

8.4 备份后修改数据

sqlplus study/123@pdborcl;
create table t1 (id number,name varchar2(50));
insert into t1 values(1,‘zhang’);
commit;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vrWt9D4m-1614747020228)(media/8100302b21e49fdfefd9671a2e1fd50b.png)]

–查看修改情况:select * from t1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WQ7hsPY6-1614747020229)(media/9a412bbe283503f5b0a49683702f0ab5.png)]

8.5删除数据库文件,模拟数据库文件损坏;

rm /home/oracle/app/oracle/oradata/orcl/pdborcl/SAMPLE_SCHEMA_users01.dbf;

8.6删除数据库文件后修改数据:删除数据文件后,仍然可以增加一条数据。这是因为增加的数据并没有写入数据文件,而是写到了日志文件中。如果增加的数据较多的时候,就会出问题了;

sqlplus study/123@pdborcl;
insert into t1 values(2,‘wang’);
commit;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.7重启损坏的数据库到mount状态

通过shutdown immediate无法正常关闭数据库,只能通过shutdown
abort强制关闭。然后将数据库启动到mount状态。
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CMl7ZfpN-1614747020232)(media/3213bd9fe82e614c1e0c6382e54ea8b8.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dOmBsGNc-1614747020233)(media/6a15aa8444f015dc6d9a3fd5db142b42.png)]

8.8 开始恢复数据库

rman target /;
[RMAN>] : restore database ;
recover database;
alter database open;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.9 查询数据是否恢复

[外链图片转存中...(img-Tjc0wHVx-1614747020236)][外链图片转存中...(img-RYwbvDpY-1614747020236)]
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值