谈谈Oracle基本操作(下)

Oracle事物

  事物是保证数据致性(正确性)的一种机制,由一组相关的DML语句组成,该组DML语句要么全部成功,要么全部失败.银行转账.DML:增删改  

  数据库内存和磁盘原理 : 

    硬盘是不错数据处理的,只是数据的存储,任何对硬盘中数据更改操作都是先载入到内存,然后对数据进行更改,然后把更改好的数据写回硬盘.硬盘只有两个操作读-写;在数据库频繁的增删改的操作中,容易引起磁盘碎片,降低效率,浪费空间,所以有的数据需要重整,所以,这里可以看出表头和数据是分离的,在数据库基本原理中,需要我们commit以后,我们在硬盘中的更改才会写入硬盘.默认是SQL语句一完成就立即提交.所以事务机制必须先关闭自动提交;

  事物和锁:

    在数据库基本原理中,需要我们commit以后,我们在硬盘中的更改才会写入硬盘.默认是SQL语句一完成就立即提交.所以事务机制必须先关闭自动提交;

  事物的原理:

    结合删除的回滚,保存点;

    保证数据的一致性(面对客户),由dml语句组成的,就是增删改.队列+锁的机制;

    commit执行后实际的顺序:加锁,建立回滚点,执行,确认,结束,删除保存点,释放;

    提交以后,所有的保存点都会删除,没有后悔药了就,切记,rollbak就不再有用了;

    如果不commit,会在exit退出是,全部自动commit

  事物提交:

    commit语句可以提交事务.当执行了commit语句后,会确认事务的变化,结束事务,删除保存点,释放锁.全部结束后,别人才能看到数据的变化,别人也才可以操作

  回滚事务/回退事务:

    保存点:就是在数据操作的线性事务中,以某个时间点的数据为样本,保存下来.当我们的事务完整执行的时候,该保存点会被删除.当我们的事务语句没有执行完就中断的时候,我们就把数据恢复到这个保存点再删除这个点.执行rollback语句的时候;  

  事物列子:

    1 savepoint sp1;
    2 delete from emp where ename='SMITH';
    3 savepoint sp2;
    4 delete from emp where ename='SCOTT';
    5 rollback to sp2;
    6 rollback to sp1;

  只读事物:

    只允许运行进行查询操作,而不允许执行DML操作(增删改)的事务,使用只读事务可以确保用户只能取得某时间点的的数据.12306每天11点开始统计今天的销售情况,这时候就用只读事务.在设置了只读事务以后,尽管其他提交可能会引起数据新的变化,但是只读事务不会取得数据的最新变化,从而保证只取得特定时间点的信息;


 

数据库日常管理

  数据库备份原理:只允许运行进行查询操作,而不允许执行DML操作(增删改)的事务,使用只读事务可以确保用户只能取得某时间点的的数据.

  数据备份导出:

    三种形式的导出备份:导出表,导出方案,导出数据库:

      userid:用于指定导出操作的用户名,密码,链接 userid=c##scott/root@orcl

      tables:用于指定要要导出的表
      owner: 用于指定要导出的某个用户的方案
      full=y: 用于指定要导出的数据库
      inctype: 用于指定执行导出操作的增量类型
      rows:用于指定导出过程中是否要导出表中的数据
      file:用于指定导出的文件名

    导出自己的表:exp userid=scott/tiger@orcl tables=(表1,表2,...)file=d:/emp_back.dmp;

    导出别人的表(DBA权限/exp_full_database权限):导出别人的表(DBA权限/exp_full_database权限)

    导出表结构:exp userid=scott/tiger@orcl tables=(表1,表2,...) file=d:/emp_back.dmp rows=n;

    直接导出(快速导出):exp userid=scott/tiger@orcl tables=(表1,表2,...) file=d:/emp_back.dmp direct=y;

 

    导出整个方案:导出方案是指:使用export导出一个方案或者多个方案中的(表,索引,约束)和数据,存放到文件中;导出自己的: exp c##scott/root@orcl owner=c##scott file=d:/scott.dmp

    导出整个数据库:导出整个数据库,是指利用export导出所有数据库中的对象及数据(dba权限,exp_full_database权限);exp userid=system/root@orcl full=y  inctype=complete file=d:\all.dmp

  数据备份(导入):

    使用工具import 将文件中的数据和对象导入到数据库,方案,表中.但是这个导入的必须是用export所导出的文件.与导出相似,导入也分为导入表,导入方案,导入数据库三种形式

    有这些选项:

      userid:用户名,密码,链接字符串

      tables:指定要执行导入操作的表

      fromuser:指定源用户
      touser:用于指定目标用户
      file:指定要导入的文件名
      full=y:用于指定指定导入整个文件
      inctype:用于指定执行导入操作的增量类型
      rows:指定是否要导入表行(数据)
      ignore:如果表存在,则只导入数据

    导入表:

      导入自己的备份到自己的表imp userid=c##scott/root@orcl tables=(emp) file=d:\emp_bak.dmp //如果是system用户,则要求该表没有主外键关系

      导别人的备份到别人的表:dba/imp_full_database权限:  imp userid=system/root@orcl tables=(emp) file=d:\emp.dmp touser=scott

      把别人的备份导入到自己的表(结构一样):imp userid=system/root@orcl tables=(dept) file=d:\bak_dept.dmp

      导入表结构,不导入数据:imp userid=c##scott/root@orcl tables=(emp) file=d:\bak_emp.dmp rows=n

      导入数据:对象已经存在,则只可以导入表的数据 imp userid=scott/root@orcl tables=(emp) file=d:\bak_emp.dmp ignore=y

    导入方案:

      导入方案是指用import工具将文件中的对象和数据导入到一个或则多个方案中.导入其他方案需要dba权限,或者imp_full_database去杂念

      导入自己的方案:imp userid=c##scott/root  file=d:\***.dmp

      导入其他方案: imp userid=system/root file=d:\xxx.dmp fromuser= system touser scott

    数据库导入:imp userid=system/root full=y file=d:/orcl.dmp //相当于数据库迁移

 

  数据字典:

    1.数组字典原理:

      基表:保存了数据库的基本信息,在硬盘中的静态数据

      视图:是oracle在运行中,把基表中的数据载入内存,就可以直接查看

      显示当前数据库全称:select * from global_name;

      当前用户可以访问的所有数据字典视图:s*f dict where comments like '%grant%'

    2.数据字典表管理:在sys方案的基表中:基本的静态数据,普通用户不能直接访问

      动态性能视图:开启后的性能参数,是基于基表数据建立的视图,普通用户通过这个来看数据库信息,三种:user_xxx,all_xxx,dba_xxx

      user_tables:当前用户拥有的表,它只返回用户对应方案的所有表 select  table_name from user_tables; 

      all_tables:当前用户可以访问的表(不是数据库所有表)  select  table_name from all_tables; 

      dba_tables:显示所有方案所有的表(就是数据库的所有表) select  table_name from dba_tables;  ==DBA角色,或者select_any_table系统权限  

    3.数据字典_用户:

      原理:grant授予;默认创建用户的时候,会默认创建角色,并且会把权限角色等存入到基表中(先找到对应的视图)

      用户:dba_users;//查看所有用户的详细信息:select * from dba_users;desc dba_users;

      角色系统权限: select * from dba_sys_privs where grantee="CONNECT"select * from role_sys_privs where role="DBA"

      角色对象权限:select * from dba_tab_privs where grantee='角色名'

      权限:dba_sys_privs//查看用户系统权限; s * from system_privilege_map order by name;

      数据表空间:s tablespace_name from dba_tablespaces;

  动态性能视图(即时生成动态情况)

    动态性能视图记录当前数据库在内存(当前例程)的活动信息,当启动Oracle_server的时候,系统就会建立动态性能视图;当停止Oracle server的时候,系统会删除动态性能视图.Oracle的所有动态性能视图都以v_$开始,并且Oracle为每个动态性能视图都提供了响应的同义词,并且同义词是以V$开始的,所以v_$datafile的同义词为v$datafile;动态性能视图的所有者为sys,一般情况下,由dba或者特权用户来查询动态性能视图. 由于这个实际中用得很少,所以大家和我一起飘过.

  管理表空间 和数据文件

    基础:

      表空间是数据库的逻辑组成部分.从物理上讲,数据库存放在数据文件中;从逻辑上讲,数据库是存放在表空间中,表空间由一个或是多个数据文件组成.所以一个表的数据被放在一个表空间,但是在多个不同的数据文件中;数据库的逻辑结构包括:表空间,段,区,和块-->数据库由表空间构成,表空间由段构成,段又由区构成,区又由oracle块构成的这样一种结构.可以提高数据库的效率;类似于广场上由瓷砖铺成的地图.哪个市,哪个县,哪个镇,哪个村;数据库里面可以有人以多个大于等于1个表空间,表空间可以达到以下效果:1 控制数据库占用的磁盘空间 2 dba可以将不同的数据类型部署到不同的位置,这样有利于提高I/O的性能,减少操作磁盘的次数.同时有利于备份和恢复等操作    表空间的增删改查:

      增:建立表空间使用create tablespace命令来完成,需要注意的是,建立表空间需要特权用户或者是DBA角色来完成,如果是非这两个角色用户,则别的用户必须具有create tablespace的系统权限 

      删:drop tablespace sp001 including contents and datafiles;

      改:select * from all_tables where tablespace_name='表空间名'//查询空间内的表

    改变表空间的状态:

      当表空间建立的时候,表空间处于联机的状态(online)状态,这时候表空间是可以访问的,此时改表空间可读可写,可以在表空间执行各种语句.但是在进行系统维护的时候或者数据维护的时候,可能需要改变表空间的状态.一般都是特权用户或者DBA来操作
      使表空间脱机:alter tablespace sp001 offline;
      使表空间联机:alter tablespace sp001 online;
      只读表空间:alter tablespace sp001 read only;(insert,update,delete都不可用)
      ORA-00372: file 13 cannot be modified at this time
      ORA-01110: data file 13: 'D:\TABLESPACE\SP001.DBF'
      让表空间可读写:alter tablespace sp001 read write;

    扩展表空间:

      表空间是由数据文件组成,表空间大小实际就是数据文件相加后的大小,加入,emp存放在data01的表空间上,初始大小是2m,当数据满了2m以后,再继续向emp表中插入数据,就会提示空间不足的错误

 

  总结:

    1 了解表空间和数据文件的作用

    2 掌握常用表空间,ubdo表空间和临时表空间的建立方法
    3 了解表空间的各个状态:(online,offline,read,write,readonly)的作用,以及如何改变表空间状态的方法
    4 常见的数据备份和恢复,以及5步操作

 

 


数据的完整性

  原理:    

    本质是数据合理性,符合逻辑规则本质就是对要存储到该数据表/列的数据的一些要求

  约束(constraint):

    就是表的设计;数据合理就不能放在数据表中

    基础知识

      not null (非空)某列表头如果定义了not,null的话,那么插入数据的时候,就会检查是否有数据,如果没有,就会报错 

      unique:(唯一,id)可为空某列表头定义了unique以后,插入是就会遍历表,看是否有重复

      primary key:主键:定义主键以后,该列数据不能重复切不能为null

      foreign key:外键:定义主表和从表之间的关系.外键约束要定义在从表上,主表的列必须具有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或为null

      check:用于强制要求数据必须满足的条件,假定在sal上定义了check约束,并要求sal值在1000-2000之间,不在的话,就报错

    约束的增,删,改,查

      增:alter table goods modify goodsName not null;

      删:alter table 表名 drop constraint 约束名称;

      查:查看表多有的约束:select constraint_name, constraint_type,status,validated from user_constraints where table_name='表名';

       :查看约束列:select column_name,position from user_cons_columns where constraint_name='约束名';

 

 


JDBC(java程序操作数据库)

  原理:

    相关接口及其继承关系

  基础操作六步骤:

    1:加载驱动----Class.forName("oracle.jdbc.driver.OracleDriver");//反射机制

    2:获取连接对象---Connectionct= DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","system","root");  

    3:连接---Statement sm=ct.createStatement();

    4:传输数据,数据库处理,接收数据结果集:ResultSet rs = sm.executeQuery("SQL");

    5:处理结果集

    6:关闭资源(3个)---rs.close();sm.close();ct.close();

  操作:

    query

    DML

    procedure

    事物

 

   

 

         

 

       

                 

      

 

 

      

 

    

 

posted on 2015-07-27 21:27  时光流逝,我已不再  阅读(138)  评论(0编辑  收藏  举报

导航