zoukankan      html  css  js  c++  java
  • 谈谈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:ak_dept.dmp

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

          导入数据:对象已经存在,则只可以导入表的数据 imp userid=scott/root@orcl tables=(emp) file=d:ak_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:TABLESPACESP001.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

        事物

     

       

     

             

     

           

                     

          

     

     

          

     

        

     

  • 相关阅读:
    leetcode 1140. Stone Game II
    主席树
    Codeforces Round #442 (Div. 2) E Danil and a Part-time Job (dfs序加上一个线段树区间修改查询)
    UVALive 3942 Remember the Word
    UVA 11235 Frequent values (RMQ )
    CodeForces
    hdu 2955 Robberies (01背包好题)
    hdu 1054 Strategic Game (简单树形DP)
    hdu 5532 Almost Sorted Array (水题)
    hdu 2089 不要62 (数位dp基础题)
  • 原文地址:https://www.cnblogs.com/xcxcxc/p/4678513.html
Copyright © 2011-2022 走看看