求《法医秦明百度云资源》百度云资源,谢谢谢谢www

基于SQL server 2008数据库的ifix操作记录教程_机械/仪表_工程科技_专业资料。基于SQL server 2008数据库的ifix操作记录教程 数据库部分 1 创建服务器数据库 1.1 ......教程(续)--编写一个小型的信息管理系统受委托为编程入门网做一个简单的 vb 操作数据库的实例,来演示一下如何用 vb 向数据库中添加、修改、删除记录这些操作。......题号: 2 本题分数:4 分从一个数据库文件中取出满足某个条件的所有记录形成一个新的数据库文件的操作是( )操作。 A、投影 B、连接 C、选择 D、复制该题考......数据库应用 24.数据库操作 通过按钮弹出对话框,选择 ODBC 数据源,如 fameView userdata S 通过按钮弹出对话框,选择要查询的数据表,如 ......3数据库基本操作习题与答案_计算机软件及应用_IT/计算机_专业资料。第三章 数据...要显示数据库中当前一条记录的内容,可使用命令___。 A) LIST B) BROWSE C......查看SQL数据库操作日志方法_计算机软件及应用_IT/计算机_专业资料。第一种方...实现对数据库记录的简单操作实现对数据库记录的简单操作隐藏>> 实习十二 实现对数据库记录的简单操作 一、实习目的: 1、掌握使用数据库控件实现对数据库的简单操作......A 数据库文件、二维表、记录 C 数据结构、数据操作、完整性约束 9.所谓概念模...对于操作日志, 一般都存储在数据库中以方便查询; 但由于每个系统可能记录的字段属...学习目的: 学习目的:学会数据库的基本操作 1(写入记录) (写入记录) 数据库的基本操作无非是:查询记录,写入记录,删除记录,修改记录.今天我们先学习 写入记录. 先......? ? 数据表视图特点:非常直观;同时可以浏 览大量的记录;便于浏览修改记录。打开 一个表的数据表视图方式操作方法有以下 几种: (1)在”数据库”窗口中,双击一......学会数据库的基本操作--写入记录数据库的基本操作无非是:查询记录,写入记录,删除记录,修改记录。 今天我们先学习写入记录。先建立一个表单:(把下面文章保存为 5.ht......网站防火墙
网站防火墙
您的IP已被网站管理员设置成禁止访问!
可能原因:您的访问IP被添加到网站安全狗IP黑名单中
如何解决:
1)如网站托管,请联系空间提供商;
2)普通网站访客,请使用其他IP进行访问,或直接联系 网站管理员;用户名:Larry.Yue
文章数:214
评论数:402
访问量:558458
注册日期:
阅读量:1297
阅读量:3317
阅读量:432451
阅读量:1120416
[匿名]51cto游客:
[匿名]王毅:
51CTO推荐博文
&& & & 这篇文章源于在PL/SQL领域非常有建树的专家:Steven Feuerstein 的推荐。
&& & & &于是突发奇想,将该篇文章翻译成了中文。如果通过我的努力,确实让一些朋友有所收获,我将非常荣幸。
&& & & &文章开始:
&& & & &之前我的一些文章中,曾经建议通过使用11g中提供的FLASHBACK的数据归档功能而直接替换日志信息表(journalling tables)。即我们已经不再需要针对某些专门表中的记录,我们需要持续跟踪记录所有的改变和被改变之前的记录状态(可以参考如下链接 )。通过Flashbck的数据归档功能不但可以减少编程工作,而且通过该功能可以大幅提升DML操作的性能,同时又可获得许多的方便的功能。例如:Flashback Queries可以直接地象SQL查询一样查询历史数据,甚至通过使用dbms_flashback包,我们可以使用相同的应用程序和相同的查询操作去检索过去某个时间点的数据。
&& & & &在之前的不太长的时间,Flashback有许多功能上的限制,而使得其基本上不能记录那些已经存有历史数据但结构又发生变化的表。随着11GR2在这些方面作的改进,绝大多数的限制都已经取消了,并且象增加、重命名以及删除字段和限制这样的对于表的DDL操作以已经可以实现。
&& & & &另外一个导致日志表可以消失的原因,就是通过Flashback的Flashback Queries操作,可以得到一些重要的附加信息。何时(DML操作的时间戳)和操作信息(操作类型和原数据信息),这些信息可以很好的知道,操作者到底导致了怎样的变化。而这些在一个部门内的监管是非常重要的。过去,习惯使用数据库用户就是真实用户去提交交易。但是当今业界使用多层服务组件和WEB应用通过池化连接数据库,而造成数据库用户往往不是操作的真实用户。对于最终用户的操作通常(或者应该这样)通过sys_context(&userenv&, &client_identifier&)可以获得,通过设置dbms_session.set_identifier() 或者直接使用连接(例如:JDBC)。对于我们的日志而言,我们需要记录或筛选真实的执行人和客户身份。
&& & & &这篇文章描述了记录和后督交易时客户身份信息的方法。
&& & &&标准的数据库审计工具(Standard Database Audit Facilities) &
&& & &&象其他一些人一样,我也不得不使用,我不甚熟悉的ORACLE数据库自带的审计功能。但让使用不够深入。但是,当试图检查过去某些数据库交易信息的时候,总是能够自然的想到使用使用审计功能。并且这种方法确实让我得到了我需要的信息:每个交易的操作记录,并且通过交易号(transactionid)可以关联到闪回的历史数据查询。这些数据会包含用户身份和执行的所有操作。Oralce数据库的审计可以进行许多种不同操作。从每种对象类型的建立、授权更新和执行操作,到每个数据库用户执行的操作甚至非法的对象。但是因为审计会产生大量的记录数据,而致使我们不得不定期清理这些历史数据。通常这些周期只能都是非常短暂的。为了记录交易历史,我尝试通过日志表转而使用审计功能。并且我需要确定审计的等级--那些操作和那些对象(是否还包含用户?)现在,我需要使用FLASHBAKC功能协助,就像我参考的那些文档,并且我需要确保每个针对EMP表的DML操作都必须被记录。这就意味着,下面的SQL开启审计功能:&& & & &
AUDIT&INSERT,&UPDATE,&DELETE&ON&SCOTT.EMP&
&& & & &为了审计功能,我假设一个web应用,这个应用可以让真是的最终用户修改数据。在数据库中执行如下操作:设置用户身份,应用程序需要执行:&& & & &
begin&&&dbms_session.set_identifier('TheRealUser');&end;&
&& & & &&进行下一个DML操作:
update&emp&set&&&&&&sal&=&sal&+&100&where&&job&='CLERK'&
&& & & &&当交易被提交后,EMP使用了新的值,而原有的值成为了历史数据。这些历史数据,可以通过Flashback Versions Query被我们查询。
select&ename&,&&&&&&sal&,&&&&&&versions_xid&,&&&&&&VERSIONS_STARTTIME&,&&&&&&VERSIONS_ENDTIME&from&&&emp&VERSIONS&BETWEEN&TIMESTAMP&MINVALUE&AND&MAXVALUE&where&&job&=&'CLERK'&
&& & & & 结果集如下:
ENAME&&&&&&SAL&&&&VERSIONS_XID&&&&&VERSIONS_STARTTIME&&&&&&&&&&&VERSIONS_ENDTIME&&ADAMS&&&&&&1405&&&0000&06-FEB-11&08.12.09.00&AM&&&&&06-FEB-11&08.42.13.00&AM&ADAMS&&&&&&1505&&&0000&06-FEB-11&08.42.13.00&AM&ADAMS&&&&&&1400&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&06-FEB-11&08.12.09.00&AM&JAMES&&&&&&1255&&&0000&06-FEB-11&08.12.09.00&AM&&&&&06-FEB-11&08.42.13.00&AM&JAMES&&&&&&1355&&&0000&06-FEB-11&08.42.13.00&AM&JAMES&&&&&&1250&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&06-FEB-11&08.12.09.00&AM&MILLER&&&&&1605&&&0000&06-FEB-11&08.12.09.00&AM&&&&&06-FEB-11&08.42.13.00&AM&MILLER&&&&&1705&&&0000&06-FEB-11&08.42.13.00&AM&MILLER&&&&&1600&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&06-FEB-11&08.12.09.00&AM&SMITH&&&&&&1105&&&0000&06-FEB-11&08.12.09.00&AM&&&&&06-FEB-11&08.42.13.00&AM&SMITH&&&&&&1205&&&0000&06-FEB-11&08.42.13.00&AM&SMITH&&&&&&1100&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&06-FEB-11&08.12.09.00&AM&
&& & & &很显然,这些记录的数据中没有修改数据人的信息。但是,配合之前开启的审计追踪功能,我可以关联Flashback的Versions Query与 USER_OBJECT_AUDIT试图,找到更多的执行人(WHO)的数据信息:
select&ename&,&&&&&&sal&,&&&&&&uat.client_id&,&&&&&&uat.os_username&,&&&&&&uat.userhost&,&&&&&&uat.username&,&&&&&&uat.scn&,&&&&&&versions_xid&,&&&&&&VERSIONS_STARTTIME&,&&&&&&VERSIONS_STARTSCN&,&&&&&&VERSIONS_ENDTIME&,&&&&&&VERSIONS_ENDSCN&from&&&emp&VERSIONS&BETWEEN&TIMESTAMP&MINVALUE&AND&MAXVALUE&eh&&&&&&&&join&&&&&&&&user_audit_trail&uat&&&&&&&&on&(&eh.versions_xid&=&uat.transactionid)&where&&job&=&'CLERK'&order&by&&&&&ename,&versions_starttime&
&& & & &结果集显示客户身份(client identifier)信息与实际的操作用户不符。
ENAME&&SAL&&CLIENT_ID&&&&OS_USERNAME&USERHOST&USERNAME&SCN&&&&&&VERSIONS_XID&&&&&VERSIONS_STARTTIME&&&&&&&VERSIONS_STARTSCN&&ADAMS&&1505&TheRealUser&&demo&&&&&&&&xp-vm&&&&SCOTT&&&&000E&06-FEB-11&08.42.13.00&AM&2200778&JAMES&&1355&TheRealUser&&demo&&&&&&&&xp-vm&&&&SCOTT&&&&000E&06-FEB-11&08.42.13.00&AM&2200778&MILLER&1705&TheRealUser&&demo&&&&&&&&xp-vm&&&&SCOTT&&&&000E&06-FEB-11&08.42.13.00&AM&2200778&SMITH&&1205&TheRealUser&&demo&&&&&&&&xp-vm&&&&SCOTT&&&&000E&06-FEB-11&08.42.13.00&AM&2200778&
&& & & &注意:如果我想通过flash的versions query找到开启审计之前的历史数据,需要使用左外联接在我们的查询中。&& & & &
select&ename&,&&&&&&sal&,&&&&&&uat.client_id&,&&&&&&uat.os_username&,&&&&&&uat.userhost&,&&&&&&uat.username&,&&&&&&uat.scn&,&&&&&&versions_xid&,&&&&&&VERSIONS_STARTTIME&,&&&&&&VERSIONS_STARTSCN&,&&&&&&VERSIONS_ENDTIME&,&&&&&&VERSIONS_ENDSCN&from&&&emp&VERSIONS&BETWEEN&TIMESTAMP&MINVALUE&AND&MAXVALUE&eh&&&&&&&&left&outer&join&&&&&&&&(&select&uat.*&&&&&&&&&&,&&&&&&row_number()&over&(partition&by&transactionid&order&by&extended_timestamp)&rn&&&&&&&&&&from&&&user_audit_trail&uat&&&&&&&&&)&uat&&&&&&&&on&(&eh.versions_xid&=&uat.transactionid)&where&&job&=&'CLERK'&and&&&&rn&=&1&order&by&&&&&ename,&versions_starttime&
&& & & &现在,我已经介绍了一个嵌套SQL,如何通过一个查询将user_audit_trail所有交易都查询出来,而不是通过一个交易一个查询的方式进行检索。
&& & & &这个方法确实非常简单。因为,我们可以象轻松开启审计信息那样开启每张表的Flashback功能。
&& & & &但是这里却有一个审计开销缺点。首先是性能问题,因为对于每条被&触碰&到的记录,都会触发日志信息记录,同时存储在系统审计表SYS.AUD$中的数据量将是非常惊人的。因为审计将会收集所有用户和对象的操作。审计信息存储表需要周期性清除。注意,清理可以有选择行的指定某个对象或者操作。
&& & & &为了简化标准的审计跟踪功能,我们可以构建一个JOB,周期性地从 sys.aud$表中抽取我们需要的记录信息,并构建自己需要的交易历史。因为审计机制会完整的记录每个交易的DML操作语句但我们只是需要每个交易的单个记录,我们可以通过整合针对每个交易记录的审计信息,达到大幅降低交易历史数据量的目的。交易历史表可以象如下:
create&table&transaction_history&(&transaction_id&&&&varchar2(100)&not&null&,&client_identifier&varchar2(200)&,&os_user&&&&&&&&&&&varchar2(200)&,&scn&&&&&&&&&&&&&&&number&,&transaction_start_timestamp&&&&&timestamp&default&systimestamp&,&db_user&&&&&&&&&&&varchar2(100)&,&application_info&&varchar2(2000)&)&
&& & &&从审计跟踪表中抽取交易历史数据操作:
insert&into&transaction_history&(&transaction_id&,&client_identifier&,&os_user&,&scn&,&transaction_start_timestamp&,&db_user&)&select&uat.transactionid&,&&&&&&uat.client_id&,&&&&&&uat.os_username&,&&&&&&uat.scn&,&&&&&&uat.extended_timestamp&,&&&&&&uat.username&from&&&(&select&uat.*&&&&&&&&&&,&&&&&&row_number()&over&(partition&by&transactionid&order&by&extended_timestamp)&rn&&&&&&&&&&from&&&user_audit_trail&uat&&&&&&&&&)&uat&where&&rn&=&1&and&&&&transactionid&is&not&null&
&& & & &对于审计跟踪(可能需要部分清理)和交易历史表(可能不能全部更新),我们可以将两者结合来构建基于EMP表的交易历史记录。
select&ename&,&&&&&&sal&,&&&&&&versions_xid&,&&&&&&nvl(th.client_identifier,&uat.client_id)&client_id&,&&&&&&nvl(th.os_user,&uat.os_username)&os_user&,&&&&&&uat.userhost&userhost&,&&&&&&nvl(th.db_user,&uat.username)&db_user&,&&&&&&nvl(th.scn,uat.scn)&scn&,&&&&&&VERSIONS_STARTTIME&,&&&&&&VERSIONS_STARTSCN&,&&&&&&VERSIONS_ENDTIME&,&&&&&&VERSIONS_ENDSCN&from&&&emp&VERSIONS&BETWEEN&TIMESTAMP&MINVALUE&AND&MAXVALUE&eh&&&&&&&&left&outer&join&&&&&&&&(&select&uat.*&&&&&&&&&&,&&&&&&row_number()&over&(partition&by&transactionid&order&by&extended_timestamp)&rn&&&&&&&&&&from&&&user_audit_trail&uat&&&&&&&&&)&uat&&&&&&&&on&(&eh.versions_xid&=&uat.transactionid)&&&&&&&&left&outer&join&&&&&&&&transaction_history&th&&&&&&&&on&(&eh.versions_xid&=&th.transaction_id)&where&&job&=&'CLERK'&and&&&&uat.rn&=&1&order&by&&&&&ename,&versions_starttime&
&& & & &注意:查询可以部分的结合审计跟踪信息和我们自己的交易历史表在一个试图中。
&& & & &上面提及的大概方法给我们提供一个针对标准应用构建日志表的思路。在这个举例中,我们并没有建立触发器。简单地开启针对某些表DML操作的审计跟踪,配以这些表的flashback归档数据,就足以构建我们的日志信息。在后续的文章中将会更为详细的介绍。
&& & & &当然,如果我们要实际构建这样的日志信息也许还有一个难点需要克服,即关于DBA的审计,尤其是对于标准审计特性,对于DBA和对于应用开发人员的日志记录,我们的应用往往是没有考虑的(但是,我们需要他或她也去建立flashback的归档数据)。
&& & & &在未来的文章中,我将会讨论看似相似的问题:跟踪交易历史的方法和通过flashback归档数据收集全面的日志信息。
&& & & &----EOF 译文完。
&& & & &原文链接:
&& & & &Thanks&Lucas Jellema -:)
&& & & & & & &&
了这篇文章
类别:┆阅读(0)┆评论(0)ORACLE认证基础:ORACLE系统概述-Oracle认证考试-青年人网
青年人品牌推荐:
您现在的位置:&&>>&&>>&&>>&&>>&正文
ORACLE认证基础:ORACLE系统概述
来源:青年人()& 12:55:28 & 【Oracle认证考试】
   如果在共享池一共享SQL区中包含有相同SQL语句时,该服务器进程可利用已存在的共享SQL区执行客户的SQL语句。    如果在共享池中没有一个SQL区包含有相同的SQL语句时,在共享池中为该语句分配一新的共享SQL区。    在每一种情况,在会话的PGA中建立一个专用SQL区,专用服务器进程检查用户对查询数据的存取权限。       (6) 如果需要,服务器进程从数据文件中检索数据块,或者可使用已存储在实例SGA中的缓冲存储区的数据块。    (7) 服务器进程执行存储在共享SQL区中的SQL语句。数据首先在SGA中修改,由DBWR进程在最有效时将它写入磁盘。LGWR进程在在线日志文件中记录用户提交请求的事务。    (8)如果请求成功,服务器将通过网络发送一信息。如果请求不成功,将发送相应的错误信息。    (9)在整个过程中,其它的后台进程是运行的,同时注意需要干预的条件。另外,ORACLE管理其它事务,防止不同事务之间请求同一数据的竞争。    2) 使用多线索服务器的ORACLE的运行    在这种配置下,ORACLE运行过程如下:    (1) 一数据库服务器计算机运行使用多线索服务器配置的ORACLE。    (2) 在一客户工作站运行一数据库应用(在一用户进程中)。客户应用合适的SQL*NET驱动器试图建立到数据库服务器计算机的连接。    (3) 数据库服务器计算机当前运行合适的SQL*NET驱动器,它的网络接收器进程检出用户进程的连接请求,并决定用户进程如何连接。如果用户是使用SQL*NET版本2,该网络接收器通知用户进程使用一个可用的调度进程的地址重新连接。    (4) 用户发出单个SQL语句    (5) 调度进程将用户进程的请求放入请求队列,该队列位于SGA中,可为所有调度进程共享。    (6) 一个可用共享服务器检验公用调度进程请求队列,并从队列中检出下一个SQL语句。然后处理该SQL语句,同前一(5),(6)和(7)。注意:会话的专用SQL区是建立在SGA中。    (7) 一当共享服务器进程完成SQL处理,该进程将结果放置发入该请求的调度进程的响应队列。    (8) 调度进程检查它的响应队列,并将完成的请求送回请求的用户进程。    4.数据库结构和空间管理    一个ORACLE数据库是数据的集合,被处理成一个单位。一个ORACLE数据库有一个物理结构和一个逻辑结构。    物理数据库结构(physical database structure)是由构成数据库的操作系统文件所决定。每一个ORACLE数据库是由三种类型的文件组成:数据文件、日志文件和控制文件。数据库的文件为数据库信息提供真正的物理存储。    逻辑数据库结构是用户所涉及的数据库结构。一个ORACLE数据库的逻辑结构由下列因素决定:    一个或多个表空间    数据库模式对象(即表、视图、索引、聚集、序列、存储过程)    逻辑存储结构如表空间(dataspace)、段(segment)和范围将支配一个数据库的物理空间如何使用。模式对象(schema object)用它们之间的联系组成了一个数据库的关系设计。    1) 物理结构    (1) 数据文件    每一个ORACLE数据库有一个或多个物理的数据文件(data file)。一个数据库的数据文件包含全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地存储在数据库的数据文件中。数据文件有下列特征:    一个数据文件仅与一个数据库联系。    一旦建立,数据文件不能改变大小    一个表空间(数据库存储的逻辑单位)由一个或多个数据文件组成。    数据文件中的数据在需要时可以读取并存储在ORACLE内存储区中。例如:用户要存取数据库一表的某些数据,如果请求信息不在数据库的内存存储区内,则从相应的数据文件中读取并存储在内存。当修改和插入新数据时,不必立刻写入数据文件。为了减少磁盘输出的总数,提高性能,数据存储在内存,然后由ORACLE后台进程DBWR决定如何将其写入到相应的数据文件。    (2) 日志文件    每一个数据库有两个或多个日志文件(redo log file)的组,每一个日志文件组用于收集数据库日志。日志的主要功能是记录对数据所作的修改,所以对数据库作的全部修改是记录在日志中。在出现故障时,如果不能将修改数据永久地写入数据文件,则可利用日志得到该修改,所以从不会丢失已有操作成果。    日志文件主要是保护数据库以防止故障。为了防止日志文件本身的故障,ORACLE允许镜象日志(mirrored redo log),以致可在不同磁盘上维护两个或多个日志副本。    日志文件中的信息仅在系统故障或介质故障恢复数据库时使用,这些故障阻止将数据库数据写入到数据库的数据文件。然而任何丢失的数据在下一次数据库打开时,ORACLE自动地应用日志文件中的信息来恢复数据库数据文件。    (3) 控制文件    每一ORACLE数据库有一个控制文件(control file),它记录数据库的物理结构,包含下列信息类型:    数据库名;    数据库数据文件和日志文件的名字和位置;     数据库建立日期。    为了安全起见,允许控制文件被镜象。    每一次ORACLE数据库的实例启动时,它的控制文件用于标识数据库和日志文件,当着手数据库操作时它们必须被打开。当数据库的物理组成更改时,ORACLE自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。    2) 逻辑结构    数据库逻辑结构包含表空间、段、范围(extent)、数据块和模式对象。    (1) 表空间    一个数据库划分为一个或多个逻辑单位,该逻辑单位称为表空间(TABLESPACE)。一个表空间可将相关的逻辑结构组合在一起。DBA可利用表空间作下列工作:    控制数据库数据的磁盘分配。    将确定的空间份额分配给数据库用户。    通过使单个表空间在线或离线,控制数据的可用性。    执行部分数据库后备或恢复操作。    为提高性能,跨越设备分配数据存储。    数据库、表空间和数据文件之间的关系如下图所示:    Database&   DTATAFILE1    (2MB) DATAFILE2    (2MB) DATAFILE3    (2MB)    Driver1 Driver2    每个数据库可逻辑划分为一个或多个表空间    每一个表空间是由一个或多个数据文件组成,该表空间物理地存储表空间中全部逻辑结构的数据。DBA可以建立新的表空间,可为表空间增加数据文件或可删除数据文件,设置或更改缺省的段存储位置。    每一个ORACLE数据库包含有一个名为SYSTEM的表空间,在数据库建立是自动建立。在该表空间中总包含有整个数据库的数据字典表。最小的数据库可只需要SYSTEM表空间。该表空间必须总是在线。表和存储的PL/SQL程序单元(过程、函数、包和触发器)的全部存储数据是存储在SYSTEM表空间中。如果这些PL/SQL对象是为数据库建的,DBA在SYSTEM表空间中需要规划这些对象所需要的空间。    表空间利用增加数据文件扩大表空间,表空间的大小为组成该表空间的数据文件大小的和。    DBA可以使ORACLE数据库中任何表空间(除SYSTEM表空间外)在线(ONLINE)或离线(OFFLINE)。表空间通常是在线,以致它所包含的数据对数据库用户是可用的。当表空间为离线时,其数据不可使用。在下列情况下,DBA可以使其离线。    使部分数据不可用,而剩余的部分允许正常存取    执行离线的表空间后备    为了修改或维护一应用,使它和它的一组表临时不可用。    包含有正在活动的回滚段的表空间不能被离线,仅当回滚段不正在使用时,该表空间才可离线。    在数据字典中记录表空间的状态,在线还是离线。如果在数据库关闭时一表空间为离线,那么在下次数据库装配和重新打开后,它仍然保持离线。    当出现某些错误时,一个表空间可自动地由在线改变为离线。通过使用多个表空间,将不同类型的数据分开,更方便DBA来管理数据库。    ORACLE数据库中一表空间是由一个或多个物理数据文件组成,一个数据文件只可与一个表空间想联系。当为一表空间建立一数据文件时,ORACLE建立该文件,分配指定的磁盘空间容量。在数据文件初时建立后,所分配的磁盘不包含任何数据。表空间可以在线或离线。在ORACLE中还允许单独数据文件在线或离线。    (2) 段、范围和数据块    ORACLE通过段、范围和数据块逻辑数据结构可更细地控制磁盘空间的使用。   段    段(SEGMENT)包含表空间中一种指定类型的逻辑存储结构,是由一组范围组成。在ORACLE数据库中有几种类型的段:数据段、牵引段、回滚段和临时段。    数据段:对于每一个非聚集的表有一数据段,表的所有数据存放在该段。每一聚集有一个数据段,聚集中每一个表的数据存储在该段中。    索引段:每一个索引有一索引段,存储索引数据。    回滚段:是由DBA建立,用于临时存储要撤消的信息,这些信息用于生成读一致性数据库信息、在数据库恢复时使用、回滚未提交的事务。    临时段:当一个SQL语句需要临时工作区时,由ORACLE建立。当语句执行完毕,临时段的范围退回给系统。    ORACLE对所有段的空间分配,以范围为单位。    范围    一个范围(EXTENT)是数据库存储空间分配的一个逻辑单位,它由连续数据块所组成。每一个段是由一个或多个范围组成。当一段中间所有空间已完全使用时,ORACLE为该段分配一个新的范围。    为了维护的目的,在数据库的每一段含有段标题块(segment header block)说明段的特征以及该段中的范围目录。    数据块    数据块(data block)是ORACLE管理数据文件中存储空间的单位,为数据库使用的I/O的最小单位,其大小可不同于操作系统的标准I/O块大小。    数据块的格式:    公用的变长标题    表目录    行目录    未用空间    行数据    (3) 模式和模式对象    一个模式(schema)为模式对象(scehma object)的一个集合,每一个数据库用户对应一个模式。模式对象为直接引用数据库数据的逻辑结构,模式对象包含如表、视图、索引、聚集、序列、同义词、数据库链、过程和包等结构。模式对象是逻辑数据存储结构,每一种模式对象在磁盘上没有一个相应文件存储其信息。一个模式对象逻辑地存储在数据库的一个表空间中,每一个对象的数据物理地包含在表空间的一个或多个数据文件中。    表    表(table)为数据库中数据存储的基本单位,其数据按行、列存储。每个表具有一表名和列的集合。每一列有一个列名、数据类型、宽度或精度、比例。一行是对应单个记录的列信息的集合。    视图    一个视图(view)是由一个或多个表(或其他视图)中的数据的一种定制的表示,是用一个查询定义,所以可认为是一个存储的查询(stored query)或是一个虚表(virtual table)。视图可在使用表的许多地方使用。    由于视图是由表导出的,视图和表存在许多类似,视图象表最多可定义254列。视图可以被查询,而在修改、插入或删除时具有一定的限制,在视图上执行的全部操作真正地影响视图的基本表中的数据,受到基本表的完整性约束和触发器的限制。    视图与表不同,一个视图不分配任何存储空间,视图不真正地包含数据。由查询定义的视图相应于视图引用表中的数据。视图只在数据字典中存储其定义。    引入视图有下列好处:    。通过限制对表的行预定义集合的存取,为表提供附加的安全性    。隐藏数据复杂性。    。为用户简化命令    。为基本表的数据提供另一种观点。    。可将应用隔离基本表定义的修改    。用于不用视图无法表示的查询。    。可用于保存复杂查询。    聚集    聚集(cluster)是存储表数据的可选择的方法。一个聚集是一组表,将具有同一公共列值的行存储在一起,并且它们经常一起使用。这些公共列构成聚集码。例如:EMP表各DEPT表共享DEPTNO列,所以EMP表和DEPT表可聚集在一起,聚集码的列为DEPTNO列,该聚集将每个部门的全部职工行各该部门的行物理地存储在同一数据块中。    索引    索引(index)是与表和聚集相关的一种选择结构。索引是为提高数据检索的性能而建立,利用它可快速地确定指定的信息。ORACLE索引为表数据提供快速存取路径。索引适用于一范围的行查询或指定行的查询。    索引可建立在一表的一列或多列上,一旦建立,由ORACLE自动维护和使用,对用户是完全透明的。索引是逻辑地和物理地独立于数据,它们的建立或删除对表没有影响,应用可继续处理。索引数据的检索性能几乎保持常数,而当一表上存在许多索引时,修改、删除和插入操作的性能会下降。    索引有唯一索引各非唯一索引。唯一索引保证表中没有两行在定义索引的列上具有重复值。ORACLE在唯一码上自动地定义唯一索引实施UNIQUE完整性约束。    组合索引是在表的某个列上所建立的一索引。组全索引可加快SELECT语句的检索速度,在其WHERE子句中可引用组合索引的全部或主要部分 。所以在定义中给出列的次序,将经常存取的或选择最多的列放在首位。    在建立索引时,将在表空间自动地建立一索引段,索引段空间分配和保留空间的使用受下列方式控制:    索引段范围的分配常驻该索引段的存储参数控制。    其数据块中未用空间可受该段的PCTFREE参数设置所控制。    序列生成器    序列生成器(sequence generator)产生序列号。在多用户环境下该序列生成器特别有用,可生成各返回序列号而不需要磁盘I/O或事务封锁。    序列号为ORACLE整数,最多可有38个数字。一个序列定义指出一般信息:序列的名字、上升或下降、序列号之间间距和其它信息。对所有序列的确的定义以行存储在SYSTEM表空间中的数据字典表中,所以所有序列定义总是可用。由引用序列号的SQL语句使用序列号,可生成一个新的序列号或使用当前序列号。一旦在用户会话中的SQL语句生成一序列号,该序列号仅为该会话可用。序列号生成是独立于表,所以同一序列生成器可用于一个和多个表。所生成序列号可用于生成唯一的主码。同义词    一个同义词(synonym)为任何表、视图、快照、序列、过程、函数或包的别名,其定义存储在数据字典中。同义词因安全性和方便原因而经常使用,可用于:    可屏蔽对象的名字及其持有者。    为分布式数据库的远程对象提供位置透明性。    为用户简化SQL语句。    有两种同义词:公用和专用。一个公用同义词为命名为PUBLIC特殊用户组所持有,可为数据库中每一个用户所存取。一个专用同义词是包含在指定用户的模式中,仅为该用户和授权的用户所使用。    杂凑    杂凑(hashing)是存储表数据一种可选择的方法,用以改进数据检索的性能。要使用杂凑,就要建立杂凑聚集,将表装入到该聚集。在骠凑聚集中的表行根据杂凑函数的结果进行物理学存储和检索。杂凑函数用于生成一个数值的分布,该数值称为杂凑值,它是基于指定的聚集码值。    程序单元    程序单元(program unit)是指存储过程、函数和包(PACKAGE)。一个过程和函数,是由SQL语句和PL/SQL语句组合在一起,为执行某一个任务的一个可执行单位。一个过程或函数可被建立,在数据库中存储其编译形式,可由用户或数据库应用所执行。过程和函数差别在函数总返回单个值给调用者,而过程没有值返回给调用者。    包提供相关的过程、函数、变量和其它包结构封装起来并存贮在一起的一种方法,允许管理者和应用开发者利用该方法组织如此的程序(routine),来提供更多的功能和提高性能。    数据库链    数据库链是一个命名的对象,说明从一数据库到另一数据库的一路径(PATH)。在分布式数据库中,对全局对象名引用时,数据库链隐式地使用。    三、数据库和实例的启动和关闭    一个ORACLE数据库没有必要对所有用户总是可用,数据库管理员可启动数据库,以致它被打开。在数据库打开情况下,用户可存取数据库中的信息。当数据库不使用时,DBA可关闭它,关闭后的数据库,用户不能存取其信息。    数据库的启动和关闭是非常重要的管理功能,通过以INTERNAL连接到ORACLE的能力来保护。以INTERNAL 连接到ORACLE需要有下列先决条件:    该用户的操作系统账号具有使用INTERNAL连接的操作系统特权。    对INTERNAL数据库有一口令,该用户知道其口令。    另外:当用户以INTERNAL连接时,可连接到专用服务器,而且是安全连接。    1. 数据库启动    启动数据库并使它可用有三步操作:    启动一个实例;    装配数据库    打开数据库    1) 启动一个实例    启动一实例的处理包含分配一个SGA(数据库信息使用的内存共享区)和后台进程的建立。实例起动的执行先于该实例装配一数据库。如果仅启动实例,则没有数据库与内存储结构和进程相联系。    2) 装配一数据库    装配数据库是将一数据库与已启动的实例相联。当实例安装一数据库之后,该数据库保持关闭,仅DBA可存取。    3) 打开一数据库    打开一数据库是使数据库可以进行正常数据库操作的处理。当一数据库打开所有用户可连接到该数据库用存取其信息。在数据库打开时,在线数据文件和在线日志文件也被打开。如果一表空间在上一次数据库关闭时为离线,在数据库再次打开时,该表空间与它所相联的数据文件还是离线的。    2. 数据库和实例的关闭    关闭一实例以及它所连接的数据库也有三步操作:    1) 关闭数据库    数据库停止的第一步是关闭数据库。当数据库关闭后,所有在SGA中的数据库数据和恢复数据相应地写入到数据文件和日志文件。在这操作之后,所有联机数据文件和联机的日志文件也被关闭,任何离线表空间中数据文件夹是已关闭的。在数据库关闭后但还安装时,控制文件仍保持打开。   2) 卸下数据库    停止数据库的第二步是从实例卸下数据库。在数据库卸下后,在计算机内存中仅保留实例。在数据库卸下后,数据库的控制文件也被关闭。    3) 停止实例    停止数据库的最后一步是停止实例。当实例停止后,SAG是从内存中撤消,后台进程被中止。    3. 初始化参数文件    在启动一个实例时,ORACLE必须读入一初始化参数文件(initialization parameter file),该参数文件是一个文本文件,包含有实例配置参数。这些参数置成特殊值,用于初始ORACLE实例的许多内存和进程设置,该参数文件包含:    一个实例所启动的数据库名字    在SGA中存储结构使用多少内存;    在填满在线日志文件后作什么;    数据库控制文件的名字和位置;    在数据库中专用回滚段的名字。    四、数据字典的使用    数据字典是ORACLE数据库的最重要的部分之一,是由一组只读的表及其视图所组成。它提供有关该数据库的信息,可提供的信息如下:    ORACLE用户的名字;    每一个用户所授的特权和角色;    模式对象的名字(表、视图、快照、索引、聚集、同义词、序列、过程、函数、包及触发器等);    关于完整性约束的信息;    列的缺省值;    有关数据库中对象的空间分布及当前使用情况;    审计信息(如谁存取或修改各种对象);    其它一般的数据库信息。    可用SQL存取数据字典,由于数据字典为只读,允许查询。    1. 数据字典的结构    数据库数据字典是由基本表和用户可存取的视图组成。    基本表:数据字典的基础是一组基本表组成,存储相关的数据库的信息。这些信息仅由ORACLE读和写,它们很少被ORACLE用户直共3页:&&&[2]&&
责任编辑:虫虫
上一个文章: 下一个文章:
热门课程培训

我要回帖

更多关于 法医秦明全集无码资源 的文章

 

随机推荐