Oracle基础学习笔记

Oracle基础学习笔记

最近找到一份实习工做,有点头疼的是,有阶段性考核,这...,实际想一想看,大学期间只学过数据库原理,并无针对某一数据库管理系统而系统的学习,这正好是一个机会,因而乎用了三天时间学习了一下Oracle数据的相关内容,如下是我总结的一些知识点,有错误的地方请及时通知我改正。html

1、Oracle 10g的安装

 首先安装我就不载这里赘述了,能够参考这篇博客进行安装。
https://blog.csdn.net/qq_33458228/article/details/80447199
 值得一提的是在安装中有一个错误:在安装服端时,没有注意,其默认的端口为1521,而安装客户端时,将端口设置成1530,进行测试,结果测试失败。这个问题的解决参考http://www.javashuo.com/article/p-xuzzzpbr-a.html程序员

2、sqlplus基础命令

 我这里只总结了一些经常使用的命令。面试

  • win+r 输入sqlplus 或者在 cmd中输入sqlplus;
  • 用户名+回车+密码(不可见),用户名/密码(可见);
  • show user显示当前登陆用户;
  • conn 用户名[/密码](选填)切换登陆用户, AS SYSDBA以超级管理员身份登陆;
  • clear SCR 清理屏幕;
  • SET LINESIZE NUM(数字)设置每行显示的数据长度,SET PAGESIZE NUM(数字) 设置每页显示的长度;
  • edit word 打开本机编辑器,@word 执行sql脚本 ,@绝对路径 执行sql脚本;
  • host 调用本地计算机的命令;
  • select * from tab; 查看数据表
  • DESC 表名称; 查看表结构。

3、SQL基础(DQL)

(1)关系型数据库标准sql

  • 包含:DML(数据操做语言:crud)
  • DDL(数据定义语言),DCL(数据控制语言)

(2)简单查询操做数据库

  • SELECT [DISTINCT] *| 列名称[别名] ,(能够有多个)| 数据计算 FROM 数据表[别名];
    (FROM 子句肯定要查询的数据来源, DISTINCT 消除重复数据行的显示(全部内容才消除),’*’ 数据表中全部列的数据);
  • 常量:字符串用单引号’’,数字直接是写,Oracle中字符串靠左对齐,数字靠右对齐,为常量追加别名 别名不用加单引号,用 || 拼接字符串 以后只有一列;

(3)限定查询缓存

  • WHERE 子句经常使用的几种判断符号,关系运算(>、<、>=、<=、=、<>、!=、BETWEEN..AND、IN、LIKE、IS NULL;
  • Oracle 中数据区分大小写的;BETWEEN..AND 能够判断任何数据类型;
  • IS NOT NULL 优于 NOT IS NULL;
  • LIKE 进行模糊匹配:“_”匹配任意一位字符,“%”匹配0位1位或者多位字符,LIKE能够用于多种数据类型,’%%’效率差比起简单查询;
  • in (筛选种子),注意:NOT IN 之中出现有null,是程序的问题,若是发现有null,那么就不进行查询,也不返回任何内容,因此NOT IN 中必定不能出现null;
  • [ORDER BY 排序字段 [ASC(默认升序) | DESC],排序字段 [ASC | DESC],..... ],WHERE 在ORDER BY(全部)以前,ORDER BY 最后执行,可使用SELECT 别名。

(4)多表查询服务器

  • 笛卡尔积,当数据量很高的时候,多表查询会产生庞大的计算量;
  • SQL1999标准
    1)、交叉链接 CROSS JOIN 简单的将数据表关联在一块儿,然后会产生笛卡尔积 ;
    2)、天然链接 NATURAL JOIN 内链接 ,自动找到同名的字段采用内链接的模式消除笛卡尔积 USING 设置要进行关联的字段,on 设置关联条件;
    3)、外链接 : 有三类外链接 (LEFT OUTER JOIN)、(RIGHRT OUTER JOIN)、(FULL OUTER JOIN);
    4)、内链接:等值链接,在以前进行判断的时候都会使用一些条件获得的相应的数据信息;
  • Oracle语法
    外链接:数据表记录的所有显示,有三类,左外(字段=字段(+))、右外(字段(+)=字段)、全外链接;
  • 集合操做:[UNION | UNION ALL | MINUS | INTERSECT] 都用于查询结果。
    UNION运算 将集合结果整合在一块儿使用,可是相同的部分不显示,UNION ALL 将集合结果保存在一块儿显示,重复部分也显示;
    MINUS运算:差集运算 ;
    INITERSECT 运算:返回俩个查询中的相同部分,交集。

(5)分组统计函数session

  • COUNT()、SUM()、AVG()、MIN()、MAX()
  • COUNT(表中没有记录,统计结果是0而不是null,null 和 0 只是在数据库层面上有所反应,若是在程序的执行之中,null发现接受的类型是整数,自动变成0;
  • COUNT() 三种用法,COUNT(*)统计数据表中的行数,COUNT(字段)若是有null 则不统计,COUNT(DISTINCT 字段)统计去除重复
  • 分组的默认前提:列上存在有重复,非绝对 [GROUP BY 分组字段,分组字段]
  • 分组操做的定义要求:在编写没有编写GROUP BY,这时SELECT 子句中可以出现统计函数只能表示对整表进行统计操做(整表分为一组),在使用GROUP BY查询之中,SELECT 子句中只能出现分组字段和统计函数,其余字段不容许出现;在分组查询的时候,统计函数容许嵌套,可是此时的SELECT 子句之中不可以出现任何字段,包括分组字段
  • SQL执行顺序 先执行WHERE 在执行SELECT ,因此WHERE 中执行统计函数会报错,HAVING 分组后筛选。
  • HAVING和WHERE区别,
    WHERE:是在GROUP BY分组前使用,表示要对分组的数据进行筛选,不容许使用统计函数,
    HAVING:在GROUP BY以后筛选,可使用统计函数,分组操做不仅能够用GROUP BY 也能够用集合操做。
  • 子查询:常出现位置 WHERE子句 当子查询返回单行单列、多行单列、单行多列;HAVING子句 子查询返回单行单列而且须要进行统计操做的时候;FROM 子句:子查询返回多行多列(表)能够在FROM子句中出现,按照表的形式处理; SELECT子句 子查询返回单行单列,子查询为了解决查询的性能问题。WHERE 子句做用,是限制数据表中的数据行的显示,因此通常作数据筛选;IN 、ANY(三种 =ANY 与IN操做同样 >ANY 比最小的要大 <ANY 壁比最大的要小)、ALL(全部内容 俩种 >ALL 比集合最大的要大 <ALL 比集合最小的要小)看查询要求。
  • EXISTS运算 (根据子查询是否有数据的形式来判断条件是否成立的运算符 特征 只是简单的判断是否有数据返回,而并不关心返回的具体数据内容)
  • IN 与EXISTS区别 :
    IN须要明确的进行数据的判断,也就是说子查询之中返回数据的内容要参与运算。
    EXISTS 不须要参考具体的返回内容,其只是依靠是否有数据返回来判断条件是否成立。

(6)Oracle函数数据结构

  • 格式 返回数据类型 函数名称(数据|类型名称)
  • 返回数据类型
    字符串VARCHAR2,数字NUMBER,日期DATE ,
  • 经常使用字符串函数:转大写函数UPPER(数据 | 列),
    转小写 LOWER(数据 | 列),
    首字母大写 INITCAP(数据|列),
    字符串长度LENGTH(数据 | 列),
    截取字符串 SUBSTR(数据|列,截取点[,长度]),
    替换 REPLACE (数据|要替换的数据 | 列,替换数据),使用Oracle中的虚拟表验证函数,表名为 dual;在最初系统设计的时候,把用户名使用UPPER变为大写,解决用户名大小写不统一的问题;
  • 经常使用数值函数:ROUND(数据 | 列[,保留小数位])
    四舍五入,TRUNC (数据 | 列 [,保留小数位])
    数据截取,MOD(数据 | 列,数据|列):求余数。

4、Oracle SQL

(1)数据更新操做oracle

  • 数据更新操做SQL中分为三种 增长(INSERT)、修改(UPDATE)、删除 (DELETE)。
  • 数据增长: 【推荐】完整语法 INSERT INTO 表名称(列名称,列名称,..) VALUES(内容1,内容2,...) 内容 字符串 用‘’单引号声明,数字 直接编写,日期 可使用SYSDATE 自定义使用TO_DATE()转换。不设置某些字段,增长的时候不设置具体的字段内容 (推荐),或者将字段内容写成null。
    INSERT INTO VALUES(内容1,内容2,...)
  • 数据修改:UPDATE 表名称 SET 字段1=内容1,字段2=字段2,...[WHERE(更新条件s)],当没写更新条件时对全部全部数据行进行更新,加上条件,知足以前限定查询那样各类运算符和子查询。实际开发中不会更新所有的表记录,都要加WHERE。
  • 删除操做 :(尽量少用,没有成熟的系统支持数据删除)
    DELETE FROM 表名称 [WHERE 删除条件(s)]删除全部数据不设置WHERE
    在实际项目中删除操做,数据的删除分两种:物理删除(直接使用DELETE语句舌体删除干净),逻辑删除(在表中设置一个逻辑位)。在实际开发中,都使用逻辑删除,所谓删除只是一个更新处理。

(2)数据伪列

  • 伪列指的的是不存在表中的列,可是该列又能够直接使用。
  • ORACLE中俩个重量级的伪列ROWNUM(开发中很是经常使用)、ROWID(数据库分析);
  • ROWNUM 行号 显示行号 追加ROWNUM 会自动作一个数据增加列 从1开始,不固定,根据结果自动生成。查询第一行 ,查询前N行(只能)。
  • 数据的分页显示[重点]
    SELECT *
    FROM(
    SELECT 查询字段,查询字段,...,ROWNUM rn
    FROM 数据表
    WHERE ROWNUM<=currentPagelineSize) temp
    WHERE temp.rn>(currentPage-1)
    lineSize;
    其中currentPage描述的是当前所在页,而lineSize描述的每页显示的数据行数 。
  • ROWID:指的是数据行的惟一的编号,该编号经过硬盘的存储而来的,结构组成 数据的对象编号+数据的文件编号+数据保存的文件块编号+数据保存的行号。
  • 面试题:如今有一张数据表,因为某些缘由在表设计初期没有设计到位,致使在数据表之中存在有大量的彻底重复数据,如今要求删除里面重复数据(不是删除,重复的保留一个,假设保留最初增长的一个),如何实现?
    首先查询出全部应该被保留的数据(被保留的数据必定是最先增长的),最先的数据的ROWID必定是最小的,能够采用分组的形式处理(每种数据最小的ROWID),既然已经知道了每行数据最小的ROWID,那么能够直接进行删除处理,保留最小的ROWID便可。(极端用法)

(3)Oracl事务处理

  • 事务处理是关系型数据库的最大特征,保证数据完整性,要么全成功,要么全失败,形成性能瓶颈。
  • 事务控制原理:数据库与Session ,在每个Session之中都拥有属于本身的独立操做
  • ACID(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)一个用户一个用户的更新,每一个用户的更新彼此独立(谁也不妨碍)
  • commit 与 rollback
    Commit 指的是全部操做要求进行提交(真正进行数据更新);
    Rollback 若是发现数据操做操做产生问题的时候就须要进行回滚熟路,回滚到上一次的提交点;
  • ORACLE中对事物的支持控制自己是提供有一个事物的缓冲区,用户所发出的全部的更新操做并非直接马上反应到数据库中,(也能够设置关闭事物,这样全部的更新操做会马上提交反应大数据库当中),用户更新没问题commit,有问题rollback。
  • 事务锁:对于一行数据当A用户正在进行更新操做,用户必定没法进行更新,B用户等待A用户commit或者rollback的时候称为锁。在进行锁定的时候除了使用更新操做也可使用查询模式;
    SELECT * FROM table WHERE param = param FOR UPDATE; 查询锁 当前行被锁定。

(4)数据表的建立与管理

  • 数据表的定义属于SQL-DDL范畴,不受到事务的控制,只有DML操做才受到事务控制,在ORACLE 中:若是当前事物未提交,而且发生了DDL操做,全部未提交的事物将会自动提交,在实际开发中,数据表的建立要么在系统定义好的同时设置,或者最简单的方式就是进行关闭服务维护。
  • 经常使用的数据类型
    VARCHAR2(n) 200个字之内的数据用此类型
    NUMBER: 直接编写NUMBER表示的就是数字(小数或者是整数)
    |-NUMBER(n):表示最多n位整数;
    |-NUMBER(n,m):m表示个小数位,n-m的整数位。
    DATE ORACLE中DATE类型是包含有时间数据的,而其余数据库的DATE只有日期。
    CLOB 描述大文本数据(4G)
    BLOB 描述二进制的数据(4G)
  • 建立数据表
    CREATE TABLE 表名称(
    列名称 数据类型 [DEFAULT 默认值],
    列名称 数据类型 [DEFAULT 默认值],
    ...
    列名称 数据类型 [DEFAULT 默认值]
    );
  • 表的复制
    CREATE TABLE 表名称 AS 子查询;为了数据快速查询,能够采用此模式。
    SELECT * FROM table WHERE 1==2 复制表结构 编写一个绝对不可能知足的查询条件
  • 修改表名称
    开发中不建议修改表名称。只有ORACLE 中提供,数据字典:指的是数据库会自动进行相关数据对象的纪录。所谓的数据字典能够理解位一张系统维护的数据表,当用户建立一张数据表以后,用户所关注的是CREATE TABLE 的语法,在数据库中会自动的将这个表的名称以及表的相关信息都保存在一张系统维护的数据表中。表的更新就是数据字典的信息修改,该数据字典必定要由系统维护,因此用户不具有系统维护,修改数据字典只可以采用一系列的命令完成。ORACLE数据字典 有三类 USER_:用户具备的数据字典信息,DEA_:数据库系统管理员具备的数据字典信息,ALL_*:用户和管理员均可以访问的数据字典信息。
    RENAME 表名称 TO 新表名称;
  • 截断表
    表的删除并不释放全部的资源,截断表。表被截断,该表中全部资源将被完全释放 , rollback 没法恢复。
    TRUNCATE TABLE 表名称;
  • 删除表
    表一旦被删除以后默认状况下(大部分状况下是没法进行恢复的)
    语法 DROP TABLE 表名称;
    在ORACLE 10g 以前 若是要是进行数据表删除,那么直接该表的信息全被删除了。10g开始 提供恢复的机制。
    语法 DROP TABLE 表名称 PURGE;(完全删除)
  • 闪回操做
    10g开始 提供恢复的机制,当进行删除数据表操做生成长串表名称,这就是属于FlashBack(闪回)技术,至关于回收站的功能。
    查看回收站 SHOW RECYCLEBIN(不稳定)
    通用的 能够采用数据字典:
    SELECT object_name,original_name,droptime
    FROM user_recyclebin;
    恢复删除表
    FLASHBACK TABLE 表名称 TO BEFORE DROP;
    删除回收站的表;PURGE TABLE 表名;
    清空回收站: PURGE RECYCLEBIN;
  • (8)表结构修改
    追加表数据列
    ALTER TABLE 表名称 ADD (列名称 数据类型 [DEFAULT默认值]...)
    修改表数据列
    ALTER TABLE 表名称 ADD MODIFY(列名称 数据类型 [DEFAULT默认值]...)
  • 删除表数据列
    AlTER TABLE 表名称 DROP COLUMN 字段名称 ;
  • 数据库对象(DDL)操做只有三类语法:
    CREATE 对象类型 对象名称
    DROP 对象类型 对象名称
    ALTER 对象类型 对象名称

5、约束的建立与管理

(1)约束的定义及分类

  • 约束是保证数据完整性的一种手段,然后根据功能约束一共分为六种,其中
    一种成为数据类型的约束。
  • 非空约束(NOT NULL、NK):保证数据表中的某一个字段的内容不容许为null;
  • 主键约束(PRIMARY KEY、PK): 非空约束 + 惟一约束;ONSTRAINT 约束名称 PRIMARY KEY(数据项,...)多个主键都相同才算重复
  • 检查约束(CHECK、CK):设置一些判断条件,然后知足条件的数据容许更新。CHECK( 逻辑条件 )
  • 外键约束(FOREIGN KEY、FK):设置父子表之间的约束关系。
    CONSTRAINT 约束名 FOREIGN KEY(数据项) REFERENECES 代表(数据项);

(2)约束规则

  • 先删除子表,后删除主表 否则没法删除。互为父子,删不了。则用 DROP TABLE member CASCADE CONSTRAINT;无论不顾删除。
  • 对于数据的记录在默认状况下,必须先删除父表中的记录,然后才能删除子表中的记录,缺点,删除父表中的信息 先删除全部相关信息 ,很麻烦,外键设置级联操做。
  • 在外键设置 后追加ON DELETE CASCADE 级联删除
    在外键设设置 后追加ON DELETE SET NULL 级联更新, 是否使用级联并无明确要求,要看业务需求需求。
  • 知足约束条件的数据才可以被更新处理(才能被保存在数据库中)
    约束越多,数据库性能越差。单机版可适当完善约束,集群(高性能)主要主键约束。
  • 惟一约束 最加 UNIQUE 字段 (null不在惟一约束限定中)
    实际上全部的约束在oracle数据库之中都会成为一个个独立的数据库对象,若是没有为约束设置对象的名字,那么会由系统自动的分配一个惟一的名称进行该对象的标注。因此若是要查看约束的基本信息要查看数据字典。
  • SELECT * FROM user_constraints; 查看约束与对应数据表
    SELECT * FROM user_cons_columns; 查看约束
    设置约束名称 CONSTRAINT 名称 UNIQUE(数据项) 放便排查错误。方便维护;
  • 设置约束:在之后任何的系统数据库设计的时候,当你的数据表建立完成后必定要将约束同时创建完整,而且不要进行约束的变动。
  • 语法ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(字段);
    ALTER TABLE 表名称 ADD CONSTRAINT 语法只能追加非空之外的约束。
    追加非空约束必须修改表结构的方式完成:
    ALTER TABLE 表名称 MODIFY(字段 类型 NOT NULL);
    删除表名称:
    ALTER TABLE 表名称 DROP CONSTRAINT 约束名称;

6、Oracle序列

  • 所谓序列本质上指的就是自动增加列的配置实现。
    ORACLE 开始到 11g 没有自动增加列的设置,他所提供的是一种手工的控制序列的模式来实现自动增加列(本身手工控制)。
  • 用户想要进行序列的建立,可用以下语法:
    CREATE SEQUENCE 序列名称
    [START WITH 开始值]
    [INCREMENTY BY ]
    [MAXVALUE 最大值 | NOMAXVALUE]
    [MINVALUE 最小值 | NOMINVALUE]
    [CYCLE | NOCYCLE]
    [CACHE 缓存个数 | NOCACHE]
    默认状况
    开始值(START WITH): 1;
    步长(INCREMENTY BY):1;
    最大值:NOMAXVALUE;
    最小值:1;
    非循环序列:NOCYCLE;
    缓冲个数为20个:CACHE 20;
    序列信息保存在数据字典中。SELECT * FROM user_sequences;
    使用序列
    序列名称.nextval 获取下一个增加值,也就是说当前内容加上步长。
    序列名称.currval 获取序列当前的内容;
    |- 必定要先调用 序列名称.nextval 后才能够调用序列名称.currval,否则会出现“序列还没有定义的错误”;
    根据数据字典里面能够发现序列最后一次的内容使用了“LAST_NUMBER”来表示,增加是利用 “步长 * 缓存个数 ”,在oracle数据库里面为了防止每一次都频繁的进行计算,因此帮助用户作缓存处理。提升操做性能,一旦数据库停掉,可能产生跳号。
    结合到数据表中,只能利用增长语句进行操做。
    INSERT INTO 表名(字段1,字段2,...) VALUES(序列名.nextval,数据1,...);
    修改序列的默认值, CTEATE SEQUENCE 序列名 追加 设置

7、Oracle同义词

  • Dual 是sys的用户表
  • 数据库之中有一个模式的概念(SCHEMA),每一张数据包的全名实际上就是“schema.table”,对于模式最初的时候是要用户单首创建的,后来设计者们以为这样的设计比较复杂,将模式与用户名的概念结合在一块儿了,因此如今的模式基本上指的是用户名。也就是说对于emp而言,完整的表名称:scott.emp。
  • 发现不一样用户之间要进行数据表访问的时候须要追加用户名,可是为何scott访问scott访问dual表的时候没有设置这个用户名呢?
  • 之因此容许这样的访问就是由于dual属于sys.dual的同义词。因此在ORACLE中的同义词的主要目的是为了方便不一样用户的数据表的访问,而且若是想要建立同义词都要具有有管理员的权限完成。
  • 将scott.emp 的数据表建立为emp的同义词。
    语法: CREATEA [PUBLIC] SYSONYM 同义词名称 FOR 用户名.表名称;
  • 将同义词建立完成以后就能够直接利用同义词的名称进行访问 ;
    这个时候所建立的同义词只可以由sys一个用户使用,由于其不是公共同义词,若是一个同义词要被全部的用户访问,则在建立前要追加一个PUBLIC。
    删除同义词 DROP SYNONYM emp;
    同义词只是ORCALE数据库支持的技术。

8、视图的定义与使用

  • 视图的定义:它的主要功能是封装复杂的查询语句,也就是说利用视图就能够实现数据的复杂查询操做。若是要想建立视图,采用以下语法:
    CREATE [OR REPLACE] VIEW 视图名称 AS 子查询
    [WITH CHECK OPTION] [WITH READ ONLY];
  • 若是说你如今的项目里面提供有开发视图,若是使用 CREATE OR REPLACE 表示该视图若是不存在,则建立,若是存在则用新的sql替换。
    Scott以前有建立视图的权限,以后的版本权限被剥削了。
    从新受权
    CONN sys/sys AS SYSDBA;
    GRANT CREATE VIEW TO scott;
    查询视图: SELECT * FROM myview;
  • 在实际之中数据表的查询都是比较复杂的,因此在一些传统的技术开发中,视图的数量超过表的数量。随着如今的一些开的发(很难找到所谓的专业的数据库开发人员了),这样一来,全部编写复杂语句的工做又都回到程序员身上了,因此不少程序员为了代码修改放便,都再也不使用视图了。
  • 对于视图而言,支持的功能仍是不少的(不少的功能想用,本身写替代的触发器),视图是一个查询结果,并不表示真是的数据,因此理论上视图是不该该被修改的,若是默认状况下若是不进行任何的配置,视图中的数据是容许修改的(简单的状况下)。
  • 修改视图中的数据而且影响了原始的数据,最关键的是修改的字段为视图的建立条件字段,很明显这样的做法不合理,因此为了保证建立字段的内容不被改变,这个时候能够考虑使用一个子句 [WITH CHECK OPTION]。其余字段依然能够容许用户修改,可是视图之中并非真实的数据,因此为了保证视图不可更改,建议追加 [WITH READ ONLY] 配置为只读视图。
    强烈建议都采用只读模式。
    删除视图: DROP VIEW myview;

9、Oracle索引

  • 在数据库里面索引是一种相对提高数据库查询性能的技术手段。
    限定查询,观察查询处理过程,经过管理员帐户启动轨迹追踪器进行浏览;
    切换到管理员帐户:CONN sys/sys AS SYSDBA;
    打开执行追踪器:SET AUTOTRACE ON;
    执行限定查询:SELECT * FROM WHERE 条件;
  • 默认状况下数据执行时采用的全表扫描(逐行扫描)。数据量很大,执行的速度必定很慢。
    解决方案,“排序”,数据库里对于不查询的数据的排序方案就是将其行程一颗树,排列形式:取第一个数为根节点,然后比根节点小的数据放在左边,比根节点大数放在右边。
    通过排序以后会发现若是要是以本树的形式进行查询,则查询的数据量会有所减小,则连带的查询性能也会获得提高。
  • 在数据库之中对于索引的建立有两种形式:
    当数据列上使用了主键约束或惟一约束的时候自动建立索引。
    本身手工明确一个查询的字段,手工建立索引。
    CREATE INDEX scott.emp_sal_ind ON scott.emp(sal);
    虽然使用索引提高了性能,可是索引并非真的100%进行性能提高,索引实现的关键是在于整个数据库之中索引树的维护,若是没有这颗树,那意味着索引将没法使用,可是这棵树采用的是指定的索引字段才转换的树,若是该字段上的内容频繁修改,那么就将有大量的内存和性能浪费在了这颗树的维护上,那么反而会形成性能的降低,索引只是一种相对的手段,而选择创建的索引的字段也要根据实际的状况有所调整。

10、用户管理

  • SQL语句有三个方面:DML、DDL、DCL。其中DCL指的是数据库的控制语言,也就是说进行权限控制的处理操做,在DCL中,主要有两个语法:GRANT(受权)、REVOKE(回收)。若是要想正常的去使用DCL仍是要结合用户来完成,而用户在数据库之中被称为对象。
  • 要进行用户的维护,那么必定要采用管理员帐户登陆,本次使用sys登陆:
    CONN sys/sys AS SYSDBA;
    建立用户 CREATE USER dog IDENTIFIED BY wangwang ;
    打开新的sqlplus客户端进行用户的登陆,可是此时会发现出现以下提示信息:ORA-01045:user DOG lacks CREATE SESSION privilege;
  • 如今只是一个普通的dog用户,可是这个dog用户并无任何的权限,本次缺乏的CREATE SESSION 的权限。表示用户没法建立SESSION(没法登陆);
    将session权限受权给DOG,GRANT CREATE SESSION TO DOG;
    而后dog用户就能够进行登陆操做,进行序列与数据表的建立,
    CREATE SEQUENCE 、CREATE TABLE 权限不足。
    ORACLE里提供了俩个角色(每一个角色包含多个权限):CONNECT、RESOURCE,最简单的作法是将这俩个角色授予dog用户:GRANT connect,resource TO dog;
    受权完成以后若是想要使用,则要从新登陆。
  • 一旦有了用户的产生以后那么也会出现一些用户的维护:
    重置用户密码:ALTER USER dog IDENIFIED BY wangwang;
    让密码失效:ALTER USER dog PASSWORD EXPIRE;
    锁定用户:ALERT USER dog ACCOUNT LOCK;
    解锁用户:ALERT USER dog ACCOUNT UNLOCK;
  • 若是如今不一样用户之间要进行访问,那么必须具备其余用户的对象权限,而对象权限一共有四种:SELECT、INSERT、UPDATE、DELETE。
    将scott.emp表的SELECT、INSERT权限授予dog用户:
    GRANT SELECT,INSERT ON scott.emp TO dog;
  • 对象权限的回收:
    REVOKE SELECT,INSERT ON scott.emp FROM dog;
    回收角色:
    REVOKE connect,resource FROM dog;
    回收链接的权限:
    REVOKE CREATE SESSION FROM dog;
    这个时候dog没有任何权限了,那么此用户也再也不须要了,则能够进行用户的删除: DROP USER dog CASCADE; 用户有可能有各类对象的建立,因此删除的时候必定要将这些遗留的内容一块儿删除掉。

11、数据库备份

  • 数据库管理员(DBA),对于这一职业工程师其最主要的工做就是进行数据备份与灾难恢复的。若是发生了一些外在的因素,那么就必须能够及时的恢复数据执行。数据库的运行之中为了保证出现灾难以后能够及时恢复,那么也就须要进行数据的备份。
  • 数据的导入与导出
    数据导出:
    如今假设将全部的数据导出到:D:\backup 目录之中,创建一个目录
    D: -> mkdir backup -> cd backup
    执行导出命令 exp;
    |-输入要导出数据的用户名 : scott/scott
    |-设置导出的文件名称,默认为导出文件“EXPDAT.DMP”
    |-导出所有数据表:U(将该用户下的表都导出)
    数据导入:
    执行“imp”指令:
    |-导入文件:EXPDAT.DMP
  • 数据库冷备份
    数据库的冷备份是一种较为全面的数据库的备份处理模式,利用数据库冷备份操做能够保证全部的数据都是归档数据。要进行归档备份,就必须清楚数据库的存储结构。
  • ORACLE数据库是以文件的形式存储的,也就是说在一块磁盘上会划分出不一样的文件区,而每一个文件区能够保存相应的数据。对于表空间的理解,若是将图书比喻为一张数据表,那么表空间就比如图书架,整个的文件就是图书馆,一个城市有多种图书馆。
  • 进行以下几个重要的文件备份:
    备份控制文件,控制整个Oracle数据库的服务信息,经过“v$controlfile”得到。
    备份重作日志文件,经过“v$logfile”数据字典得到。
    数据文件:保存真实的数据信息,经过“v$datafile”数据字典得到;
    核心配置文件(pfile):整个Oracle核心参数。
    使用sys帐户进行登陆:
    Conn sys/sys AS SYSDBA
    查看控制文件的路径:
    SELECT * FROM v$controlfile;
    查看日志文件的路径:
    SELECT * FROM v$logfile;
    查看数据文件的路径:
    SELECT * FROM v$datafile;
    查看pfile文件路径:
    Show parameter pfile;
    关闭Oracle的服务(当即执行):
    SHUTDOWN IMMEDIATE
    将以前记录好的路径文件都拷贝到其余的磁盘上去;
    恢复Oracle数据库的实例:startup;
    前提要求:容许关闭服务,也就是说若是你如今进行的是一些企业内网的项目开发,能够,若是是7*24小时运行的服务器,那么就应该须要进行热备份。热备份最简单的方法就是创建主从关系。

12、数据库设计范式

  • 核心本质在于设计出方便扩展,而且存储精准数据结构,而且能够有效的知足于程序开发的需求。从另外的一个层次来说,数据库设计没有模式,核心:保证数据有效存储,保证查询性能。
  • 第一设计范式
    设计要求:数据表中的每一个字段不可再分
    注意:
    中国姓名就是姓名,国外分为姓(firstname)、名(lastname);
    在设计的时候应该尽量使用数据库支持的几种数据类型(字符串、数字、日期、大文本),不要将日期拆分出来
  • 第二设计范式
    设计原则:数据表中不存在非关键字段对任意一候选关键字段的部分函数依赖。因此对第二范式有俩层理解:
    函数关系:字段间的函数关系 A*B = C
    函数依赖:不一样的字段能够获得相同或者不一样的结果。
    没法确认主键,数据冗余(重复),数据更新麻烦
  • 第三设计范式
    设计原则:数据表之中不存在非关键字段对任意一候选关键字段的传递函数依赖。实际上传递的函数依赖就比如层级关系同样。
    第一范式就是单表设计原则,第二范式就是多对多关系,第三范式一对多关系。
    实际的原则:打破范式的约束,使用冗余字段。

后记

 笔记作得可能很糟糕,层次可能有些混乱。水平有限,我会继续努力的。  Oracle还有一个大的内容是PL/SQL,看了一小部分,怎么说呢,至关于学一门新的语言,可是感受不怎么通用,我这里就没有再很深刻的学习了。  BE GEEK ARTIST

相关文章
相关标签/搜索