天天看点

Oracle学习笔记(用户管理、数据库的备份和恢复)

Oracle学习笔记(用户管理、数据库的备份和恢复)

我就直接po代码,代码中有注释

/*

用户管理和数据库的备份(导出exp)和恢复(导入imp)
oracle11g数据库的导入imp/导出exp,就是我们通常所说的oracle数据的还原/备份
.dmp格式文件:就是oracle数据的文件格式(比如视频是.mp4格式,音乐是.mp3格式)

*/

--查看oracle的版本信息
select * from v$version;
select * from sys.v_$version;
select banner from sys.v_$version;

--查看数据库选件及特性(部分选件需要购买相关的许可才可以使用,比如RAC,DG,分区表等)
select * from v$option;

--查看系统时间
select SYSDATE from dual;
select to_char(SYSDATE, 'yyyy-mm-dd') from dual;

--
SELECT to_date('2019-9-4 15:20:28', 'yyyy-mm-dd hh24:mi:ss') FROM dual;
SELECT to_date('2019-6-6', 'yyyy-mm-dd') FROM dual;
--
/*以下是oracle的特殊用法(固定用法,不要钻这个牛角尖),用的比较少,不太常用*/
--显示数字的英文读法,显示Two Hundred Twenty-Two
SELECT to_char( to_date(222,'J'),'Jsp') FROM dual;
--显示数字的英文读法,显示six hundred sixty-six
SELECT to_char( to_date(666,'j'),'jsp') FROM dual;
--显示0000/0/0
SELECT to_date(222,'J') FROM dual;
--显示0000/0/0
SELECT to_date(666,'j') FROM dual;
--查询常量
SELECT '2019-10-1' FROM dual;
SELECT 666, SYSDATE FROM dual;
--如下这种写法会报错,在oracle中查询常量,后面也必须加上表名,我们可以在后面加上一个dual伪表
--SELECT 888;
--查询常量(如下是正确的写法)
SELECT 888 FROM dual;

--在Mysql中,我们查询常量的话,后面可以不加表名,如下写法
--SELECT '江西省赣州市于都县', 88.88, 6666;

/*
在oracle中有sys、system、scott这3个用户
sys用户是超级管理员
system用户是普通管理员
*/

--创建用户(属于DCL数据控制语言)
/*
创建用户的语法
CREATE USER 用户名 IDENTIFIED BY 密码;
如果想要创建用户,则首先应该使用管理员进行登录
*/
--如下:创建用户令狐冲linghuchong,密码也设置成linghuchong
CREATE USER linghuchong IDENTIFIED BY linghuchong;
/*
创建好linghuchong用户后,还不能登录,需要给linghuchong用户创建session(会话)的权
限,没有session权限就意味着用户无法登录
*/
--授予权限的语法
--GRANT 权限1,权限2,..... TO 用户名;

/*
将创建session(会话)的权限给用户linghuchong,此时用户linghuchong就可
以登录数据库了(即可以连接数据库了,用户连接上数据库就表示创建了一个session会话)
*/
GRANT CREATE SESSION TO linghuchong;

--既然linghuchong用户已经连接上数据库了,那么我们就开始创建表
/*
此时创建如下表,会提示权限不足
实际上,一个新用户的所有的权限要分别赋予,比较麻烦,很繁琐
如果我们要将多个权限一次性赋予某个用户,我们可以将这些权限定
义成一个角色,然后将角色赋予用户

在oracle中,提供了2个主要角色,它们是CONNECT和RESOURCE,我们可
以直接把这2个角色赋予linghuchong用户


*/
CREATE TABLE tabA(
ID NUMBER PRIMARY KEY NOT NULL,
NAME Varchar2(50)
)

--将CONNECT, RESOURCE这2个角色赋给linghuchong用户
GRANT CONNECT, RESOURCE TO linghuchong;

--如果linghuchong用户忘记密码,可以告诉sys(超级管理员)或者system(普通管理员),让他们来修改密码
/*
修改密码语法
ALTER USER 用户名 IDENTIFIED BY 密码;
*/
ALTER USER linghuchong IDENTIFIED BY linghuchong123;

/*
我们有时候需要这么做,当一个用户第一次登
录时,可以修改密码,要完成这项功能,我们可以手工让一个密码失效
语法如下:
ALTER USER 用户名 PASSWORD EXPIRE;
*/
--让linghuchong用户的密码失效
ALTER USER linghuchong PASSWORD EXPIRE;

/*
锁住一个用户
语法如下:
ALTER USER 用户名 ACCOUNT LOCK;
*/
--锁住linghuchong用户
ALTER USER linghuchong ACCOUNT LOCK;

/*
解锁一个用户,使用UNLOCK关键字
语法如下:
ALTER USER 用户名 ACCOUNT UNLOCK;
*/
--解锁linghuchong用户
ALTER USER linghuchong ACCOUNT UNLOCK;

/*
将某用户下的某张表的查询和删除权限授予某个用户
语法如下:
GRANT 权限1, 权限2 ON 用户名.表名 TO 用户名;
*/
--将SCOTT用户下的emp表的查询和删除权限授予linghuchong用户
GRANT SELECT, DELETE ON SCOTT.emp TO linghuchong;

--此时linghuchong用户可以对scott用户下的emp表做查询和删除操作了
SELECT * FROM scott.emp;

/*
回收权限
语法如下:
REVOKE 权限1, 权限2 ON 用户名.表名 FROM 用户名;
*/

--将linghuchong用户对SCOTT用户下的emp表的查询和删除权限回收
REVOKE SELECT, DELETE ON SCOTT.emp FROM linghuchong;

--此时,linghuchong用户就不可以对scott用户下的emp表做查询和删除操作了
SELECT * FROM scott.emp; --此时已经没有查询和删除的权限了

/*
小结:
数据库中的知识点是比较多的
数据库不亚于一套操作系统的复杂度,想要精通数据库是比较困
难的,很少人能精通数据库
*/

--显示当前用户所有TABLE表,VIEW视图等一些OBJECTS的名称
SELECT * FROM tab;

/*
数据库的备份和恢复
oracle11g数据库的导入/导出,就是我们通常所说的oracle数据的还原/备份
.dmp格式文件:就是oracle数据的文件格式(比如视频是.mp4格式,音乐是.mp3格式)

数据库备份(导出) exp
数据库恢复(导入) imp

可以备份其中某几张表,也可以备份所有表,也可以只导出表里的部分数据,看自己的需要

打开cmd窗口,在cmd窗口中执行exp导出的命令,如下:
--完全导出,full=y :表示全库导出
exp 登录名/登录密码@ip地址:端口号/sid file=导出路径 full=y
exp scott/[email protected]:1521/orcl file=D:/backup20191019.dmp full=y

--备份其中某几张表
exp 登录名/登录密码@ip地址:1521/sid file=备份路径 tables=(表1,表2,表3)
exp scott/[email protected]:1521/orcl file=D:/backup20191020.dmp tables=(employees,departments)

--只导出employees,departments表的前10行
exp "scott/[email protected]:1521/orcl file=D:/backup20191021.dmp TABLES=(employees,departments) QUERY='WHERE rownum<=10'"

--导出departments表里的部分数据
exp scott/[email protected]:1521/orcl file=D:/backup20191022.dmp TABLES=(departments) query=\" where department_id = '60'\"

--导出departments表里的部分数据
exp scott/[email protected]:1521/orcl file=D:/backup20191023.dmp TABLES=(departments) query=\" where department_name like '%a%'\"

为了验证备份,我们可以把刚才已经备份了的表删除掉,然后通过imp命令将备份的文件恢复

--数据库恢复(导入) imp

--完全imp导入
imp scott/[email protected]:1521/orcl file=D:/backup20191019.dmp full=y ignore=y

--
imp scott/[email protected]:1521/orcl file=D:/backup20191019.dmp

--只导入其中几张表
--将D:/backup20191020.dmp中的employees,departments表导入
imp scott/[email protected]:1521/orcl file=D:/backup20191020.dmp tables=(employees,departments)


小结:
导出exp/导入imp
缺点:这种导出exp/导入imp的速度相对较慢,适合数据较少的情况下使用,如
果文件超过几个G,大众性能的电脑,需要的时间会比较长

还有其它的备份和还原的方式,我这里没写,大家可以自己上网查查资料

*/