ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 五 操纵数据库数据

五 操纵数据库数据

原创 Linux操作系统 作者:treesofthehill 时间:2012-04-17 16:13:03 0 删除 编辑

1、  数据库事务

原子性(atomicity):一个事务的各个部分都必须完成,否则整个事务都不会完成。

未完成事务的回滚可以是人工进行的,不过在错误的情况下,回滚必须是自动的和不可停止的。Oracle通过撤销段来保证原子性。

一致性(consistency): 查询的结果必须与数据库在查询开始时的状态一致。

Oracle通过撤销段来保证一致性。如果撤销段没有正确配置,则有可能出现”ora-1555 snapshot too old”故障。

隔离性(isolation): 对于其他部分来说,未完成的事务必须不可视。

Oracle通过撤销段来保证隔离性。

持久性(durability):一旦使用commit命令结束某个事务,那么就必须保证数据库不丢失这个事务。

Oracle通过使用日志文件来保证持久性。

2、  执行SQL语句

2.1 select语句

   过程:如下图

 

          图一 执行select语句过程

注:服务器进程把数据文件的数据块读取到db cache里;dbwn进程将数据块从db cache 写入到数据文件里。

2.2 update语句

   过程:如下图

 

          图二 执行update语句过程

 

2.3 insert delete 语句

   过程:同update语句。

   insert delete 语句二者的差异在于所生成的撤销数据量不同。Insert生成的撤销只涉及为撤销块写下新的rowidDelete生存的撤销是被删除的整条记录。

2.4 rollback语句

   Oracle执行rollback命令时会使用撤销数据来反转需要被反转的语句。

   执行rollback会生成更多 redo log

2.5 commit 语句

   执行commit命令时发生的所有物理操作是lgwr进程将日志缓冲区的内容写入磁盘(online redo log file)。 Dbwn进程完全没有执行任何操作。在正常运行阶段,dbwn进程只将某些脏数据写入到磁盘,在需要某个检查点时,ckpt进程会指示dbwn进程将所有的脏数据写入到磁盘。

   通过lgwr进程被写入重做日志文件的重做流包含了被提交的事务以及未被提交的事务。

2.6 ddl与事务控制

   Ddl语句无法回滚。Ddl语句一旦执行就会立即具有持久状态。

2.7 自动提交

    自动提交也叫隐式提交。ddl语句、退出某个用户进程、用户进程无序退出。

3、  dml与完整性约束

如果多语句事务的一条语句违反了某个约束,那么只有这个语句被回滚,该事务的其余语句则保持完整和未提交状态。

4、  data pump

data pump用于使用更快的速度来完成批量数据的操作。

4.1 exportimport实用程序异同

    相同点:可以从某个数据库中抽出大量的数据,并且可以将这些数据转移到另一个数据库。

   不同点:实现方式不同:data pump是服务器端实用程,而exportimport 是普通的用户进程;转储文件的格式不同。

4.2 data pump的体系结构

   Expdpimpdp用户进程:与服务器进程建立会话,会话启动data pump作业

   Data pump 作业:dmnn进程(主进程)、dwnn进程(工作进程)

   队列:每个Data pump 作业都有两个队列,控制队列和状态队列。

   3种文件:sql文件、日志文件和转储文件

   控制表:启动作业时,dmnn进程会生成控制表。控制表用于记录作业的进度和描述该作业,并且包含在转储文件(转储文件的最后一项)中。

4.3 目录

Dp 在一个oracle目录中读写文件。Dba在数据库内创建一个目录,这个目录指向操作系统内的一个物理路径。

使用dba_directories视图查看目录的相关信息。

Oracle目录始终属于sys,但是为了创建目录,必须被授予”create directory”权限。

4.4 直接路径和外部表路径

直接路径避开了db cache。外部表路径使用了db cache。外部表路径插入操作使用了一个正规的提交。直接路径操作并不使用提交,而是简单地将高水位线(high water mark)向上移动,从而能够包含最新写入的数据。

高水位线(hwm):是表中的一个水印,在这个水印之上未进行过写操作。

直接路径极为快速。

只有简单的结构才能够使用直接路径进行处理;对于复杂的对象来说,由于为了分解复杂性而要求与sga进行交互,因此必须使用外部表路径。

4.5 在网络模式中使用data pump

   Impdp userid=scott/tiger tables=dept, emp network_link=li directory = dp_dir

5、  sql*loader

用于批量上载某些第三方系统所生成的数据集。

dp区别在于:sqlldr能够读取任何文件;sqlldr是一个用户进程

Sqlldr 文件:输入数据文件、控制文件、日志文件、错误文件、废弃文件

5.1控制文件

   控制文件是指示sqlldr如何处理输入文件的文本文件。

   定长记录控制文件

   Load data

   Infile ‘fixed.dat’ “fix 15”

   Into table names

   Fields terminated by ‘,’

   (first,last)

   可变长记录控制文件

   Load data

   Infile ‘fixed.dat’ “var 3”

   Into table names

   Fields terminated by ‘,’

   (first,last)

   流格式记录控制文件

   Load data

   Infile ‘fixed.dat’ “str  ‘\n’”

   Into table names

   Fields terminated by ‘,’

   (first,last)

5.2 数据加载方法

   直接路径

   常规路径

   直接路径加载快,但是存在一些局限性。

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9537053/viewspace-721433/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-06-11

  • 博文量
    97
  • 访问量
    179874