现在的位置: 首页 > 综合 > 正文

ORACLE DBA技术学习笔记

2013年11月24日 ⁄ 综合 ⁄ 共 27043字 ⁄ 字号 评论关闭

一、ORACLE的基本概念   

 数据字典属于名为SYS的ORACLE用户。数据字典永远不会被直接访问。为了便于访问数据字典和获取数据库中对象的相关信息,我们通过数据字典视图来完成。   

 .USER_视图:允许用户获取其模式中对象的相关信息;   

.ALL_视图: 允许用户获取其拥有的或可被访问的对象的相关信息。   

.DBA_视图: 提供数据库中所有对象的完整信息。   

DBA的职责:   

1.评估并决定服务器硬件的规模;   

2.安装ORACLE软件与补充资料;   

3.计划与设计数据库结构;   

4.创建数据库;   

5.为了保护数据的安全,能够备份数据和采用其他方法;   

6.创建与维护数据库用户;   

7.实现应用程序与数据库设计;   

8.还原与恢复数据库;   

9.监视与调整数据库性能。

 

二、安装ORACLE   

 OFA:Optimal Flexible Architecture,最优灵活体系结构;   

OFA的目标是:通过在任意平台和文件系统中更易于查找Oracle文件,从而更容易管理Oracle数据库。OFA提供了一种标准的目录结构,从而就使安装的所有Oracle软件看上去较为相似,从而降低了数据库管理员的学习曲线。ORACLE并不强制要求使用OFA却强烈推荐使用这种结构。OFA既不会自动在多个磁盘之间展开Oracle文件,也不会为Oracle可执行文件提供命名约定,这种体系结构只是将若干ORACLE数据文件,重做日志文件,控制文件及其他文件放入一个数据库实例;   

OCS: Oracle Consulting Service,Oracle 顾问咨询    装载点命名模式:/pm,其中p是一个串常量,m是一个变量值。如:/ora01   

 装载点内采用/pm/h/u/product/v命名安装Oracle软件的目录。/pm为装载点,h表示用途的标准目录名(如app,db,home),u是目录拥有者的名称,product是个常量字符串,v指定在目录中安装的Oracle产品的版本。如:/ora01/db/oracle/product/10.20;   

在目录结构之内可以创建一个admin目录,并且还可以在admin目录内创建存储oracle所使用的特定文件类型的其他子目录。这些目录的完整路径名为/pm/h/admin/d/a,其中,admin是个常量字符串,d是数据库的系统标志符(SID)或名称,a用于存储特定管理文件类型的子目录。     遵循OFA的管理目录及其描述

目录名                    用途                                                      示例     

adhoc   存储数据库专用的SQL,pl/sql脚     本                                                                                                                                                    /ora01/db/admin/ocp10g/adhoc      arch        存储已归档的重做日志文件                                                          /ora01/db/admin/ocp10g/arch      adump       存储审计文件(需首先设置AUDIT_FILE_DEST)                                 /ora01/db/admin/ocp10g/adump       bdump       存储后台进程跟踪文件和警告日志文件                                                         (使用BACKGROUND_DUMP_DEST设置)        /ora01/db/admin/ocp10g/bdump      cdump       存储核心堆积文件                                                                                       (使用CORE_DUMP_DESC设置)                                                                                                      /ora01/db/admin/ocp10g/cdump      create      存储用于创建数据库的脚本                                                            /ora01/db/admin/ocp10g/create      exp         建议存储使用EXPORT实用程序或                                                                                                                                                                                 ORACLE Data Pump创建的数据库导出文件        /ora01/db/admin/ocp10g/exp      logbook     存储数据库历史与状态日志文件                                                         /ora01/db/admin/ocp10g/logbook      pfile       存储用于启动数据库的参数文件                                                                                       /ora01/db/admin/ocp10g/pfile      udump       存储用户进程跟踪文件                                                                              (使用USER_DUMB_DEST设置)                            /ora01/db/admin/ocp10g/udump      

文件命名 /pm/q/d。pm是装载点,q是一个字符串常量,这个字面值指示包含ORACLE数据库数据的字典,而d是数据库的名字,来源于DB_NAME或ORACLE_SID环境变量       runInstaller -responsefile respfile [-silent][-nowelcome]      -nowelcome命令行选项告知在启动时不显示欢迎界面。-silent可选项告诉不用通知用户在安装时所发生的事情,只需执行响应文件中指定的所有任务;           

 在安装之前,OUI会执行一系列系统检测以确保计算机配置适合安装ORACLE,并且确保安装用户以具有安装权限的用户身份进行登录;这些系统检测存储在一个名为oraparam.ini文件中。      我们可以指示使用哪个参数文件的命令行手工调用安装程序

      eg: /mnt/cdrom/runInstaller -parameterFile /home/oracle/oraparam.ini 

     如果不希望OUI执行任何检测,则可以使用下列的命令行:   

     /mnt/cdrom/runInstaller -ignoreSysPrereqs   

    OUI(ORACLE Universal Installer)是一个基于JAVA的图形应用程序,能够在ORACLE运行的所有平台上完成相同的任务。OUI允许安装的源位置是一个URL,从而支持基于WEB的部署,OUI能够自动执行静默安装;

       /etc/oratab文件包含一个在计算机上安装的数据库实例的列表及一个指示在计算机启动时数据库实例是否应当自动启动的指示器。这个文件并不包含已安装的ORACLE产品清单,ORACLE的版本特定信息或EM配置细节;

       Oracle配置助手包括:iSQL*Plus Configuration Assistant(配置用于连接该数据库的Oracle Containers for Java(OC4J)实例),Oracle Net Configuration Assistant(NETCA,为该数据库设置基本的网络互联)及Oracle Database Configuration Assistant(DBCA,实际完成选择安装的数据库的配置);

      在Unix的计算机上安装Oracle时,必须在启动安装过程之前创建oracle用户及oinstall组(拥有Oracle安装信息)和dba组(用于数据库管理)。

       在使用WINDOWS操作系统的计算机上安装ORACLE时,必须作为本地Administrators组的一个成员登录计算机;在UNIX环境中,则需要使用oinstall组和oracle用户;

            如果希望使用N-tier身份验证和数据库中的表数据,那么必须安装和购买Enterprise Edition(企业版).Standard Edition(标准版)支持其他所有的性能(RAC,多CPU支持及EMDC);       ORACLE使用三种方法来存储数据文件:File System,ASM(Automated Storeage Management,自动化存储管理)及Raw Devices(裸设备)。File System包含Oracle Cluster File System和第三方磁盘存储阵列;     

 

三、创建数据库

    在创建数据库阶段尽可能只进行简单的操作,首先创建数据库并使其正常运作,然后再考虑配置数据库的问题。

        ORACLE服务器的体系结构  

  ORACLE服务器由两个实体组成:实例(instance)和数据库。这两个实体是独立的,不过连接在一起。在数据库创建过程中,实例首先被创建,然后才创建数据库。在典型的单实例环境中,实例与数据库是一对一的关系。但实例与数据库的关系也可以是多对一的即不同计算机上的多个实例打开共享磁盘系统上的一个公用数据库,这种关系被称为RAC(Real Application Clusters,实际应用群集)。

    实例由存储结构和进程组成,并且只短暂存在于RAM和CPU中。数据库由磁盘上的物理文件组成。实例的生存期是其在内存中的存在时间,我们可以启动和停止实例。

    数据字典包含了描述整个服务器的元数据,它可以管理物理结构与逻辑结构之间的关系。创建数据字典是数据库创建过程中的主要部分。

     一个ORACLE实例由一块被称为系统全局区(System Global Area,SGA)的共享内存以及若干进程组成。SGA至少包含共享池、数据库高速缓存区以及日志缓冲区这三种数据结构,此外还可能包含大池,JAVA池或流池。启动实例时会确定某些SGA结构的大小,而其他一些SGA结构的大小可以动态变化。创建数据库时并不会确定任何SGA结构的大小。    共享池可被进一步细分为其他一些结构:库缓存区与数据字典缓存区。库缓存区是一个内存区域,用于以解析后的形式存储最近执行的代码。数据字典缓存区存储最近使用的对象定义。

     数据库高速缓存区是Oracle执行SQL的工作区域。    

    日志缓冲区是一个非常小的存储结构。

     大池是一个可选区域。如果创建了大池,那各种进程都会自动使用大池。否则就只能使用共享池中的内存。

     只有在应用程序试图运行数据库内的JAVA存储过程时,才需要使用JAVA池。JAVA池用于实例化JAVA对象所需的堆空间。JAVA池如今已被视为一种标准的存储结构。

     调整SGA存储结构的大小对于性能来说至关重要。

     实例除了SGA存储结构外,至少还具有5个进程:系统监视进程(system monitor,SMON),进程监视进程(process monitor,PMON),数据库写入器进程(database writer,DBWn,最多可以使用10个这样的进程),日志写入器进程(log writer,LGWR),检查点进程(checkpoint,CKPT)进程。不论实例中是否确实有会话登录甚至还未创建或打开数据库,这些进程总是在实例运行时存在。

    SMON主要是打开数据库,从而支持实例与数据库间的连接。在正常运行期间,SMON能完成一系列监视与整理操作;

    PMON管理用户会话,在会话出现问题时执行适当的操作;

    DBWn负责数据文件的所有写入。没有任何会话能够不断地更新磁盘上的数据。会话只更新数据库高速缓存区中的数据;DBWn尽可能少和尽可能不频繁地进入写作操,因为I/O会使性能变差。

    LGWR负责将应用于数据库高速缓存区中数据的所有变化写入磁盘的联机重做日志文件。与DBWn不同的是,这种写行为尽可能接近于实时完成;LGWR能够确保保存所有的用户工作,从而在数据库的数据文件受损的情况下可以应用这些变化来实现还原备份,保证不丢失任何数据;

    CKPT进程确保实例不时地与数据库同步,CKPT能够控制同步情况的发生频率;

     ORACLE数据库由三种文件类型组成:控制文件,联机重做日志文件及数据文件;其他外部文件包括:初始化参数文件,口令文件与归档的重做日志文件;

     每个数据库都具有一个控制文件。但应该创建这个控制文件的多个副本。控制文件包含指向数据库其他文件(联机重做日志文件和数据文件)的指针,存储维护数据库完整性所需的信息。如果eovery Manager(RMAN),某些备份信息也会被存储在其中。控制文件是不可或缺的,它的维护是自动的,我们只能控制其副本的数量及存入位置。我们可以添加,删除或移动副本,但这些操作中能在停机时间进行;

    每个数据库都具有至少两个联机重做日志文件。但应该为每个联机重做日志文件创建多个副本。联机重做日志将应用于数据库的所胡变化按时间顺序连续存储在一起。这样只需最少的信息就可以重新构造或重做变化。重做日志由若干组重做日志文件组成,每个文件都被称为一个成员。要运行ORACLE,需要至少两组重做日志文件,每组重做日志文件至少具有一个成员。考虑性能因素,可以创建两组以上的重做日志文件,考虑到安全性因素,可以为每组重做日志文件创建多个成员。对联机重做日志文件的调整可以在不停机的情况下“联机”执行。

    在数据库创建阶段,至少必须创建两个数据文件。数据文件是数据的存储仓库。数据文件的大小与数据实际上不受限制,大小只受主操作系统和硬件性能的限制。数据文件是系统管理员可视的物理结构。在数据库生成期内的任何时候,数据文件都可能被重命名,重新分配大小,移动,添加或删除。对数据文件的某些操作必须在停机时进行。

      数据库的逻辑结构:表空间与段

    表段:包含信息记录; 

   索引段:用于快速访问任意特定记录的机制;

    撤销段:用于存储颠倒或回滚不希望持久的事务可能需要的信息的一种数据结构;

        从逻辑上看,表空间是一个或多个段的集合;

从物理上看,表空间是一个或多个数据文件的集合。按照关系分析,段与数据文件之间存在多对多的关系:一个表可以被分割在多个数据文件中;一个数据文件可能包含多个表。

    在数据库创建阶段,必须创建许多组成数据字典的段。这些段被存储在名为SYSTEM与SYSAUX的表空间内。为了存储数据字典,在数据库创建阶段必须至少创建上述两个表空间,必须为每个表空间至少创建一个数据文件。

        数据字典是元数据,它从逻辑上和物理上描述了数据库及其内容。用户定义,安全性,完整性约束,PL/SQL代码及性能监视信息(ORACLE10G特有的)都是数据字典的组成部分。数据字典被存储为SYSTEM和SYSAUX表空间内的若干段。组成数据字典的段与其他段一样,都只具有表和索引。但是数据字典的段不能被直接访问。通过DDL语言可以对数据字典进行自动维护。

     参数文件:定义实例。  除DB_NAME之外,所有参数都具有默认值;除DB_BLOCK_SIZE之外,通过关闭数据库,关闭实例,编辑参数文件及再次启动数据库,所有参数都能够在数据库创建之后被改变。在创建数据库之前,必须创建一个参数文件,并且倩这个参数文件在内存中构建实例。参数文件具有两种类型:旧式的静态参数文件(通过名为init<SID>.ora,其中<SID>是实例的名称);动态参数文件(名为spfileSID.ora)。静态参数文件是一个简单的文本文件,实例只在启动时读取一次静态参数文件;动态参数文件是一个二进制文件,由ORACLE自身通过响应输入命令进行维护和编辑。

    ORACLE提供了两种不基于数据字典的身份验证方法,可以在不打开数据库甚至不存在数据库的情况下对用户身份进行验证:操作系统身份验证和口令文件身份验证。

    口令文件是一个操作系统文件,该文件独立于数据库而存在,并且具有用户名与加密的口令。使用适当的语法,我们可以连接某个实例,使用口令文件中存在的一个用户/密码组合响应提示框,启动该实例,打开已有的数据库或创建新的数据库。

    归档日志文件是已填满的联机重做日志文件的副本。归档日志文件能够保证不丢失数据。     DB_BLOCK_SIZE决定数据库高速缓存中缓冲区的大小。指示实例创建数据库时,该参数会被用于格式化组成SYSTEM和SYSAUX表空间的数据文件。创建数据库后,DB_BLOCK_SIZE参数再也不会发生变化。CONTROL_FILES参数是允许实例查找数据库控制文件(包括控制文件的所有副本)的指示器。

        如果不重新创建数据库,那数据库字符集就是唯一不能改变的设置。

      在数据库创建阶段需要指定SYSAUX表空间。如果没有指定这个表空间,ORACLE会创建一个默认的SYSAUX表空间。UNDO表空间如果没有指定,则不会创建,因为UNDO表空间是可选的。但为了性能和管理的需要,建议创建UNDO表空间。

    只有在每个联机重做日志文件组具有多个成员(两个或两个以上)的情况下,才能够提供联机重做日志容错。 

 

 四、接合ORACLE数据库

    DDL语言:并不直接处理数据,而是处理能够保存数据和提供对数据进行访问的对象;CREATE、ALTER和DROP,TRUNCATE是主要DDL语句;

    DCL语言:控制对数据库的访问;GRANT和REVOKE是DCL语句。能够授予和取消的两种权限是系统权限和对象权限。系统权限支持用户执行关于数据库的动作。对象权限被应用于数据库中的特定对象,并且可能根据对象类型发生变化。

    DML语言:直接处理数据。SELECT,UPDATE,DELETE,INSERT是主要的DML语言。还包括由COMMIT,ROLLBACK和SAVEPOINT命令组成的事务控制语言元素。UPDATE,INSERT,DELETE命令会启动一个新的事务。SELECT不会启动事务;ROLLBACK和COMMIT会结束一个事务同时启动另一个事务。

     事务的ACID测试:

    原子性:Atomicity.整个事务必须作为一个单元提交或者全部都不提交;

    一致性:Consistency.事务必须遵循某些逻辑规则;   

 隔离性:Isolation.完成事务的进程必须能够绝对控制其作用的所有元素;

    持久性:Durability.某个事务完成之后,数据必须保持不变,并且对于所有用户来说都是可视的。    

 ORACLE通过锁定指定表来控制隔离性。

    共享锁:SELECT语句获得共享锁。共享锁无法阻止其他用户读取和修改表中的数据,而只能阻止其他用户修改或删除指定表的表结构。多个用户能同时获得相同数据上的共享锁;

    排他锁:排他锁阻止其他用户获得正在处理的数据上的排他锁,直至COMMIT或ROLLBACK语句。

     一个对象的名称必须与相同用户拥有的其他对象的名称不同。

     数据库、系统与会话管理命令:   

ALTER DATABASE命令用于对数据库进行全部或部分修改;  

  ALTER SYSTEM命令用于改变运行实例的状态,如ORACEL初始化参数的值和只允许DBA连接实例和进行其他一些操作。

    ALTER SESSION命令允许用户个性其会话的属性。

     有效的PL/SQL代码块吸需要BEGIN和END关键字,并且在这两关键字之间至少存在一行有效的代码;

        SQL*PLUS包含的SET命令可以被保存在一个名为login.sql的文件中,启动SQL*PLUS时会执行该文件来适当配置SQL*PLUS环境;

    DBA可以通过在PRODUCT_USER_PROFILE表(属于SYSTEM模式)中添加条目来限定用户在SQL*PLUS中使用的命令;

     在LINUX环境中启动iSQL*PLUS,需要以oracle(ORACLE软件的拥有者)身份登录安装ORACLE软件的计算机,同时确保查找中包含$ORACLE_HOME/bin,然后执行    isqlplusctl start;如果希望在LINUX系统中停止iSQL*PLUS,则执行    isqlplusctl stop。

    在WINDOWS环境中iSQL*PLUS作为一种服务来运行,通过MMC管理单元来进行启动和关闭。使用isqlplusctl命令也可以停止、启动这种服务并检查该服务的状态。

    可以在WEB浏览器中输入:/isqlplus">http://<server>:<port>/isqlplus形式的URL来运行。其中server是运行ORACLE的计算机的名称或IP,port是侦听iSQL*PLUS的TCP端口号,通过为5560。如果5560被占用,那会向上查找更大的可用端口。为了确定哪些端口被占用,我们可以查看$ORACLE_HOME/install目录中portlist.ini文件的内容。

     访问数据库,可以使用JAVA和JDBC;可以有计划地使用OCI的API及其他一些对象接口和API,还可以在3GL代码中编写SQL,然后使用预编译程序生成有效的运行时调用。

     ORACLE Database 10g包含了一个JVM,使用这个JVM可以执行在数据库中存储的JAVA存储过程和函数。内置的JVM使用JDBC来操作数据库数据;

    对编写ORACLE应用程序来说,OCI是最快速和最复杂的API。

    使用WINDOWS平台的开发人员可以使用ODP.NET,OO4O,ODBC来编写访问ORACLE数据的应用程序;五、管理ORACLE进程    如果希望启动SQL*PLUS时不出现登录提示,则使用/nolog开关的命令;

         lsnrctl start  listener_name :启动监听器

    lsnrctl stop   listener_namer:关闭监听器

    lsnrctl statu  listener_namer:查看监听器的状态 

   如果没有运行侦听程序,Database Control就无法连接数据库。停止侦听程序并不会影响已经建立的会话,只是不能建立任何新的会话;

    Enterprise Manager Database Control(EMDC)是Entrprise Manager Grid Control(EMGC)的替代品。EMDC被限制于每次管理一个数据库,而EMGC每次可以管理多个数据库及应用服务器。

    emctl start dbconsole:启动EMDC进程;

    emctl stop  dbconsole:停止EMDC进程;

    emctl status dbconsole:查询EMDC进程状态;

     EMDC进程运行后,通过下面的URL来连接数据库:    :/em">http://<host.domain>:<port>/em  

  <host.domain>是数据库服务器的地址,相同计算机上的第一个数据库使用的端口默认是5500,第二个默认是5501,依此类推。

    EMDC中存在一个定位至iSQL*PLUS的链接;         普通用户无法启动或关闭数据库,因为普通用户依据数据字典进行身份验证,但是数据字典在数据库打开前无法被读取,从而使普通用户无法启动或创建数据库。所以普通用户必须使用作为ORACLE软件拥有组的一个成员通过操作系统进行身份验证;通过给出存在于外部口令文件的某个用户名/密码组合进行身份验证。通过在用户进程中给出使用适当语法的CONNECT命令,就可以告知ORACLE希望使用外部身份验证。如果使用EMDC,通过使用SYSOPER或SYSDBA实现。

        CONNECT user/pass[@db]:标准数据字典身份验证,数据库必须已经打开,任何用户使用此语法连接数据库,就无法执行启动或关闭命令;

    CONNECT user/pass[@db] as sysdba:进入外部口令文件验证用户名/口令组合。    CONNECT user/pass[@db] as sysoper:同上   

CONNECT / as sysdba :使用操作系统身份验证。ORACLE会进入主机操作系统,并且查看运行SQL*PLUS的主机操作系统用户是否为拥有ORACLE软件的操作系统组的一个成员,如果通过测试则该用户就可以在不必给出口令和用户名的情况下以SYSDBA或SYSOPER身份登录ORACLE;

    CONNECT / as sysoper:同上

    使用后四种语法连接数据库的用户不仅能够执行数据库的启动和关闭命令,还可以在任何状态下(即使数据库还未被创建的情况)连接数据库。前三种连接语法都可以包含一个数据库连接串。

         SYSOPER能执行下列命令:   

        STARTUP

     SHUTDOWN 

   ALTER DATABASE [MOUNT | OPEN | CLOSE | DISMOUNT]  

  ALTER [DATABASE | TABLESPACE ][BEGIN | END ]

  BACKUP   

 RECOVER 

 

   SYSDBA除以上所有命令外,还能创建数据库,执行不完全恢复及创建其他SYSOPER和SYSDBA用户;

     SYSDBA和SYSOPER不是用户,而是能够被授予用户的权限。默认情况下,只有用户SYS才具有这些权限。SYS是数据库中功能最强大的用户,并且是数据字典的拥有者。

    使用SYSOPER权限能够作为用户PUBLIC进行登录。PUBLIC不是标准形式的用户,而是一个名义上的用户,该用户具有管理权限,但是在默认情况下不具有查看或操纵数据的权限。

     数据库与实例是分离的实体,两者相互独立存在。

    数据库启动的过程是:   

 1.首先在内存中构建实例;

 2.通过加载数据库来支持与数据库的连接;

 3.打开数据库以供使用。

 

    数据库具有以下四种状态: 

   SHUTDOWN:与数据库相关的所有文件都被关闭,同时实例并不存在。

    NOMOUNT: 实例被构建在内存中(SGA已被创建,根据参数文件的指定启动某些后台进程),但并没有连接任何数据库。这种情况在数据库不存在时确实可能出现;

    MOUNT:   实例定位并读取数据库控制文件。

    OPEN:    所有数据库文件都被定位和打开,并且终端用户能够使用数据库。

    执行STARTUP命令,就会依次完成上述阶段。可以在中途停止启动进程;

        参数文件:       spfile<SID>.ora,       spfile.ora,       init<SID>.ora    spfile<SID>.ora最便于用作参数文件。通常只有在RAC环境中使用spfile.ora文件。在这种环境中,一个文件可用于启动多个实例。如果需要进行人工编辑则使用init<SID>.ora文件。因为spfile.ora文件是二进制文件。    在实例启动时init<SID>.ora只被读取一次,所以init<SID>.ora文件也叫静态参数文件;在实例运行时会不断地读取和更新spfile文件,所以spfile文件也叫动态参数文件; 

    在NOMOUNT状态下,ORACLE会按照上述顺序查找参数文件,使用查找到的第一个文件并忽略其他文件。如果不存在这三个文件,实例就不能启动。NOMOUNT状态下只使用参数文件和告警日志。参数文件中的参数用于在内存中构建SGA和启动后台进程。各种实体会被写入描述这个启动进程的告警日志。告警日志位于BCKGROUND_DUMP_DEST参数所指定的位置。如果已经存在告警日志,那么要写入的内容会被添加在已存在的告警文件中,否则就会创建告警日志。如果这个阶段出现了任何问题,还会在相同的位置生成跟踪文件;

    一旦实例在NOMOUNT状态下启动成功,就可以通过读取控制文件转换到MOUNT状态下。此时ORACLE使用CONTROL_FILES参数定位控制文件,如果控制文件(或者控制文件的任何多元化副本)被损坏或丢失,那么数据库就不会被加载,并且还会在继续启动进程之前执行适当的动作。如果数据库加载成功,那么控制文件的所有副本都可用和相同;

    在数据库加载阶段,所有数据文件和联机重做日志文件的名称与位置都从控制文件中读取,但ORACLE仍然没有试图查找这些文件,这些文件的查找在转换至OPEN状态时进行。如果任何文件丢失或损坏,那么数据库就会停留在MOUNT模式下,并且只有在执行适当的动作之后才能被打开。此外,即使所有文件都存在,这些文件在数据库被找开之前也必须同步。如果数据库的最近一次关闭是有序的(也就是说数据库高速缓存区内的所有数据缓冲区首先通过DBWn进程被转储至磁盘),那么所有数据文件和联机重做日志文件都将同步;ORACLE会知道所有已提交的事务都被安全地存储在数据文件中,并且没有任何未提交的事务被挂起等待回滚。然而,如果数据库的最近一次关闭不是有序的,那么ORACLE就必须修复损坏的文件。加载和打开数据(以及在最近一次不是有序关闭数据库的情况下完成修改)的进程为SMON。只有在成功打开数据库之后,ORACLE才允许建立会话。

    数据库的关闭顺序应当与数据库打开顺序相反。在有序关闭数据期间,数据库首先被关闭,然后被卸载,最后实例被停止。在数据库关闭阶段,所有会话都会被终止:活动的事务通过PMON进程被回滚,已完成的事务通过DBWn进程被转储至磁盘,同时数据文件和重做日志文件被关闭。在数据库卸载阶段,控制文件被关闭。随后,通过解除分配SGA和终止后台进程,实例被停止下来。

     shutdown [normal|transactional|immediate|abort]; 

   normal:默认选项。不许可任何新的用户连接,但是允许继续当前的所有连接,只有所有用户自愿登录时,数据库才能真正的关闭;

    通常,正常的数据库关闭是没有意义的:即使只剩下EMDC在运行,也总是存在尚未退出登录的用户;

    transactional:不许可任何新的用户连接,没有存在于某个事务中的现有会话会被终止,允许当前位于某个事务中的会话在完成该事务之后终止。一旦所有会话终止,数据库就会关闭;    immediate:不许可任何新的用户连接,当前的所有连接的会话都被终止。任何活动的事务都将回滚,随后数据库会被关闭;

    abort:使用这个选项相当于断电;实例被立即终止。任何数据都不会被写入磁盘,任何文件句柄都不会被关闭,同时也不会采用任何有序的方式终止正在进行的事务;

    shutdown abort命令不会损坏数据库,不过会使数据库处于不一致的状态。因此建议我们在数据库异常退出之后不执行诸如备份之类的某些操作。

         normal,transactional,immediate关闭模式通过被称为:干净的,一致的或有序的关闭。在所有会话终止之后,PMON进程会回滚任何未结束的事务。接下来,CKPT进程发布一个检查点,从而促使DBWn进程将所有被更新的数据从数据库高速缓存区写入数据文件。同时LGWR进程也将仍然存在于内存当中的所有变化矢量转储至日志文件。随后,文件头被更新,文件句柄被关闭。这意味着数据库处于一致的状态;所有已提交的事务都位于数据文件中,不存在需要回滚的,被挂起的未提交事务,并且所有数据文件和日志文件同步。

    abort关闭模式被称为无序的关闭,并且会使数据库处于不一致的状态:因为已提交的事务只存在于内存中,而DBWn进程还未将它们写入数据文件,这些事务极有可能丢失。数据文件中的未提交事务也可能尚未回滚,导致数据库出现讹误。

    数据库出现讹误的定义:可能丢失了已提交的事务,也可能存储未提交的事务;数据库的讹误必须通过实例恢复来修复。

     实例恢复是使ORACLE数据库不出现讹误的回滚和重做机制。ORACLE检测到需要实例恢复,就会自动执行。实例恢复无法人工启动或取消。

     某个实例试图打开数据库时,SMON进程会检查数据文件和联机重做日志文件的状态。如果数据库的关闭是无序的,那么此时SMON进程显然会启动实例恢复进程。只有完成了实例恢复,数据库才能被打开。

 

       六、管理ORACLE存储结构:

  1.每个数据库都必须由一个或多个表空间组成,每个表空间必须属于并且只属于一个数据库;    2.每个表空间都必须由一个或多个数据文件组成,每个数据文件都必须属于并且只属于一个表空间;

    3.每个数据文件都必须由一个或多个操作系统块组成,每个操作系统块都必须属于并且只属于一个数据文件;

    4.每个表空间都可以包含一个或多个段,每个段都必须存在并且只存在于一个表空间内;

    5.每个段都必须由一个或多个区间组成,每个区间都必须属于并且只属于一个段;

    6.每个区间都必须由一个或多个ORACLE数据块组成,每个ORACLE数据块都必须属于并且只属于一个区间;

    7.每个区间都必须被定位并且只能被定位在一个数据文件内,数据文件中的空间可以被分配为一个或多个区间;

    8.每个ORACLE块都必须由一个或多个操作系统块组成,每个操作系统块都可以是并且只能是一个ORACLE数据库的部分。

    ORACLE数据文件是保存ORACLE数据的操作系统文件。大多数数据文件由文件头部,区间(已分配的空间)及新社会闲空间组成。

    数据文件的头部将其标识为数据库的一部分,并且存储了该数据文件的细节,包括数据文件所属的表空间及最后执行的检查点。 

        操作系统块是文件系统使用的最小分配单元。

     数据库是用于ORACLE结构的最高和最终单元。在数据库内,表空间是最大的存储结构。在ORACLE10g中,数据库至少具有三个表空间:SYSTEM,SYSAUX及一个撤销表空间。这三个表空间在数据库创建阶段被创建。此外,应该至少为特定数据创建一个额外的临时表空间。在ORACLE10g中SYSTEM和SYSAUX表空间被视为数据库系统的一部分。

    SYSTEM表空间包含数据字典,SYSTEM类型的撤销段或回滚段。如果没有SYSTEM表空间,数据库就无法运行。

    SYSAUX表空间用于存储统计信息及其他信息。

    创建数据库时需要遵循并且有助于改善性能的指导原则:

    1.分隔参与资源争用的数据;   

2.分隔具有不同存储要求的对象;   

3.将不同的分区存储在不同的表空间内;  

 

   表空间可以存储永久段,临时段和撤销段这三种段中的一种,分别对应于永久对象,临时对象和用于回滚或闪回查询的撤销数据;      

  ORACLE表默认空间:   

 SYSTEM表空间:用于存储数据字典及SYS模式中的所有对象。默认情况下,对这些对象的访问被限制于SYS用户和被授予DBA角色的其他用户。每个数据库都必须具有一个SYSTEM表空间;   

 SYSAUX表空间:ORACLE必须的表空间。

    TEMP表空间:  用于存储临时的对象及其数据。全局临时表的数据部分及不能完全在内存中执行排序时创建的排序段都是该表空间的示例。尽管没有任何要求,但是每个数据库都应当具有一个临时的表空间。如果没有创建临时的表空间,那么会默认在SYSTEM表空间内创建临时段;    UNDOTBS1表空间:用于为数据库存储撤销信息。撤销指允许用户读取正在发生变化但相应事务尚未被提交的记录、并且被保留在数据库内的数据。每个数据库都需要一个撤销表空间;    USERS表空间:这个默认的表空间是用于非系统用户(不是SYS或SYSTEM用户)的USER表空间。

        段是数据库中要求存储的对象。视图不是段。DBA_SEGMENTS视图可以查询相应段的信息。数据库中要求存储的任何对象都被归类为段。

     为表空间内的段分配空间时,每次只能分配一个区间。一个段由一个或多个区间组成,在一个段的创建阶段,至少会为该段分配一个区间。区间由邻近的数据块构成,区间可以由DBA人工管理,也可由ORACLE自动管理。一个段只能存在于一个表空间内,一个区间只能存在于一个属于指定表空间的数据文件内。区间是为某个段分配的若干邻近的数据块的集合。可以在表空间内本地管理区间,也可以对区间进行字典管理。可以使用DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL过程或EM将字典管理的表空间迁移为本地区间管理。但不能将本地区间管理转化为字典管理。

     数据库块是数据库内I/O的最小单位。一个表空间及其数据文件始终只具有一个数据块容量值。创建表空间时可以指定数据块容量也可以使用数据库默认的数据块容量。不同的表空间可以指定不同的数据块容量。一旦创建了表空间,除了删除和重新创建表空间外,无法改变其指定的数据块容量。

     CREATE [BIGFILE|SMALLFILE] [TEMPORARY] TABLESPACE tablespace_name    DATAFILE datafile |TEMPFILE tempfile    [MINIMUM EXTENT minimun_ext_size]    [BLOCKSIZE blocksize]    [[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]    [LOGGING|NOLOGGING]    [FORCE LOGGING]    [ONLINE|OFFLINE]    [EXTENT MANAGEMENT DICTIONARY | LOCAL [AUTOALLOCATE | UNIFORM SIZE size]]  [SEGMENT SPACE MANAGEMENT MANUAL|AUTO]     [FLASHBACK ON|OFF];

  如果数据文件已经存在于磁盘中,表空间的创建操作就会失败。可以通过在指定数据文件规范中的REUSE参数解决这个问题;

     DROP TABLESPACE tablespace_name [INCLUDING CONTENTS] [ CASCADE CONSTRAINTS];

    如果不指定INCLUDING CONTENTS 和 CASCADE CONSTRAINTS命令,那么只有在表空间内不包含任何永久对象的情况下才能删除。删除表空间是从数据库的控制文件和数据字典中去除对这个表空间的所有引用,并没有删除数据文件。使用EM操作时可以选择是否删除数据文件。  

表空间状态说明:

  读/写状态:表空间可以创建或修改对象,并且对象的内容可以修改; 

 只读状态: 表空间无法写入;

  脱机状态: 表空间内容不可用;

  BIGFILE:创建的表空间只有一个数据文件,而且这个数据文件的大小限制在文件系统所允许的范围内,该表空间无法通过数据字典进行管理,必须指定本地区间管理和自动的段空间管理;

    某个表空间一旦被设置为本地管理的表空间,就无法再将其转为字典管理的表空间。

    要得到指定数据库中的表空间及其特征的相关信息,可以使用DBA_TABLESPACES或V$TABLESPACE视图。DBA_TABLESPACES视图提供了V$TABLESPACE视图中不存在的表空间存储特征的相关信息。 

   要得到数据文件的相关信息,可以查询DBA_DATA_FILES或V$DATAFILE视图。DBA_DATA_FILES会列出数据文件所属表空间的名称;V$DATAFILE视图仅列出表空间号,而该表空间号必须与V$TABLESPACE视图连接在一起才能得到表空间的名称,但V$DATAFILE视图提供了更加详细的文件状态信息。

    对临时表空间而言,可以通过查询V$TEMPFILE和DBA_TEMP_FILES视图来获取临时文件及其存储特征的相关信息。 

   在数据库处于MOUNT(尚未打开)状态时,我们可以查询V$TABLESPACE、V$DATAFILE和V$TEMPFILE视图。

    数据库具有物理的结构和逻辑的结构。从物理的角度出发,数据库由在操作系统数据块上构建的若干数据文件组成;从逻辑的角度出来,数据库由若干表空间组成,表空间包含了在区间上构建的段。数据库中最小的逻辑单元是数据库块;

    表空间是数据库的物理结构和逻辑结构的链接。通过使用表空间,能够控制数据的位置,并且还能够分别管理数据库的各部分。

    段是数据文件中已经分配了空间的对象。段存在不同的类型:表,索引,回滚,临时段及其他一些类型。一个段只能被分配在一个表空间内;

    区间是表空间内的空间分配单元。一个区间是一组邻近的数据块,并且必须存在于一个数据文件内。属于相同段的不同区间可以们于属于相同表空间的不同数据文件内。ORACLE中,多个段不能共享一个区间;   

数据库块是数据库内最小的I/O单元。数据库中所有数据块的大小在数据库创建阶段设置,并且无法改变,除非删除重新创建数据库;

    表空间具有以下类型:SYSTEM的或非SYSTEM的,永久的或临时的,本地管理的或数据字典管理的。   

表空间可以包含永久对象或临时对象。临时对象是针对排序操作和临时表而创建的段。

    如果在数据文件定义中使用AUTOEXTEND子句,那么数据文件可以在必要时自动扩展。使用该子句时,需要确认指定NEXT值和MAXSIZE值,使文件不会占用所有可用的磁盘空间。    通过增加已有数据文件的大小和添加新的数据文件,可以增大已有的表空间的容量。通过使用ALTER TABLESPACE命令可以令某个表空间脱机或不可用。包含静态或历史数据的表空间应该通过ALTER TABLESPACE命令将其设置为只读状态。只读表空间并不需要进行常规备份,并且会阻止对数据的绝大多数修改,但可以删除位于只读表空间内的对象。 

   只有在字典管理表空间的情况下,才需要设置PCTFREE、PCTUSED、FREELISTS、FREELIST GROUPS参数。

 

七、管理数据库用户

    SYS和SYSTEM用户始终会被创建且始终没有被锁定。 

   SYS拥有数据字典及其关联的所有对象;

SYSTEM可以访问数据库内的所有对象。   

  CREATE USER user_name         IDENTIFIED [BY pwd | EXTERNALLY | GLOBALLY AS extname]    [DEFAULT TABLESPACE tablespacename]    [TEMPORARY TABLESPACE tablespacename]    [ACCOUNT LOCK | UNLOCK]    [PROFILE profilename |DEFAULT]    [PASSWORD EXPIRE]    [QUOTA num[K|M] |UNLIMITED ON tablespace    [QUOTA num[K|M] |UNLIMITED ON tablespace]...];

    user_name:用户名   

IDENTIFIED :验证用户真实性的方法:

       1. BY pwd:通过口令;      

 2. EXTERNALLY:使用这种方法,运行数据库的计算机操作系统会对用户名进行身份验证;       3. GLOBALLY AS extname:用户名和口令会被传至extname服务进行登录验证。需要外部身份验斑点机制。  

   ALTER USER user_name     IDENTIFIED [BY pwd | EXTERNALLY | GLOBALLY AS extname]         [DEFAULT TABLESPACE tablespacename]    [TEMPORARY TABLESPACE tablespacename]    [ACCOUNT LOCK | UNLOCK]    [PROFILE profilename |DEFAULT]    [PASSWORD EXPIRE]    [QUOTA num[K|M] |UNLIMITED ON tablespace    [QUOTA num[K|M] |UNLIMITED ON tablespace]...];  

  除用户名外,其他用户属性均可用ALTER USER来修改。

    DROP USER user_name [CASCADE];   

CASCADE选项会删除用户所有对象及用户拥有的表中包含的所有数据。

    要删除某个模式用户,就必须指定DROP USER命令的CASCADE选项。最好是先删除该用户的对象,再删除该用户。通过查询DBA_OBJECTS视图可以查询用户所拥有的所有对象,通过查询DBA_DEPENDENCIES视图可以查看对象依赖关系。

     授予系统权限:    GRANT privilege[,privilege,......]    TO username [,username,......]    [WITH ADMIN OPTION];   

 对于用户来说,授予该用户的权限立刻能够使用。

    一个用户被授予某个系统权限并不总是意味着该用户能够行使这个权限,可能会受到其他的限制,例如配置的定额不够造成无法在某表空间内建表等。

    WITH ADMIN OPTION权限表示被授予权限的人能够将其得到的权限授予给其他人;

     取消系统权限:    REVOKE privilege [,privilege,......]    FROM username [,username,......];   

系统权限的取消不会产生级联。

     通过查看DBA_SYS_PRIVS视图和USER_SYS_PRIVS视图可以查看系统权限的授予情况。    系统权限一般由DBA来授予或取消。

     授予对象权限:    对象权限需要由对象的拥有者来授予或取消;

    GRANT privilege [,privilege,......] | ALL [(column[,column,...])]    ON objectname    TO username | role |PUBLIC    [WITH GRANT OPTION];  

  ALL指定应当授予应用于指定对象的所有权限。   

 WITH GRANT OPTION允许表示被授予权限的人能够将其得到的对象权限授予给其他人;

     取消对象权限:    REVOKE privilege [,privilege,....] |ALL  [(column[,column,...])]    ON objectname    FROM username | role |PUBLIC    [CASCADE CONTRAINTS]; 

   对象权限的取消会产生级联。   

如果用户已被授予在特定模式中某个表上的REFERENCES权限,并且使用这个权限创建了依赖于该表的,具有FOREIGN KEY 约束的一个表,那么就需要使用CASCADE CONTRAINTS选项来取消对象权限。

     USER_TAB_PRIVS_MADE:某个用户授予其他用户在该用户模式对象上的对象权限;    USER_TAB_PRIVS_RECD:为某个用户授予的在其他用户模式对象上的权限;    ALL_TAB_PRIVS_MADE:某个用户授予其他用户在该用户模式对象与其他模式对象上的对象权限;

   ALL_TAB_PRIVS_RECD:为某个用户授予的在该用户模式对象与其他模式对象上的的权限;    USER_COL_PRIVS_MADE:某个用户授予其他用户在其模式中表上的列权限;    USER_COL_PRIVS_RECD:为某个用户授予的,在其他模式的表上的列权限;    ALL_COL_PRIVS_MADE:某个用户授予其他用户在该用户模式中表上与在其他模式中表上的列权限;

    ALL_COL_PRIVS_RECD:为某个用户授予在该用户模式表上与在其他模式中表上的列权限。

    角色是用于权限或其他角色的容器,并且能够进行外部身份验证。

    通过EM创建某个用户时,该用户会被自动授予CONNECT角色。

    CONNECT角色的权限:    ALTER SESSION、CREATE CLUSTER、CREATE DATABASE LINK、CREATE SEQUENCT、CREATE SESSION、CREATE SYNONYM、CREATE TABLE、CREATE VIEW    

 

创建角色:    CREATE ROLE rolename    [NO IDENTIFIED | IDENTIFIED BY pwd | EXTERNALLY |GLOBALLY];

    在数据库中,每个角色的名称必须惟一且不能与用户同名,因为用户和角色都被存储在数据字典中。   

  修改角色:    ALTER ROLE rolename       [NO IDENTIFIED | IDENTIFIED BY pwd | EXTERNALLY |GLOBALLY];

    为角色授予和取消权限    GRANT sys_priv[,sys_priv,...]    TO role |PUBLIC [,role |PUBLIC,...]    [WITH ADMIN OPTION];        GRANT ALL [PRIVILIEGES] | obj_pri[(column,column,...)][,obj_priv [(column,column,...)],...]    ON [schema_name.]obj_name    TO role |PUBLIC [,role|PUBLIC,...];     REVOKE sys_priv|role [,sys_priv |role_name,...]    FROM role|PULBIC [,role|PUBLIC,...]; 

       REVOKE ALL [PRIVILIEGES] | obj_priv[,obj_priv,...]    ON [schema_name.]obj_name    FROM  role|PULBIC [,role|PUBLIC,...]    [CASCADE CONSTRAINTS];  

   为用户授予和取消角色  

  GRANT role_name [,role_name,...]    TO user_name |role_name|PUBLIC[, user_name |role_name|PUBLIC,...]    [WITH ADMIN OPTION];

    REVOKE role_name,[role_name,...]    FROM user_name|role_name|PUBLIC[,user_name |role_name|PUBLIC,...];   

 如果取消某个用户的一个角色,除非断开与实例的连接或者禁用这个角色,否则不会立即为该用户取消该角色的权限。不过,在下次连接实例时,或者在角色已被取消后使用SET ROLE命令时,用户将无法再启用这个角色。

     设置用户的默认角色   

一旦为某个用户授予了一个角色,就会自动将该角色配置为默认角色。用户连接实例时会自动为用户启用该角色,并且用户也能够使用被授予给这个角色的任何权限。不过,如果希望只在用户连接实例时激活为用户授予的角色,就需要修改自动启用的默认角色集。

    如果没有ALTER USER命令或EM进行指定,那么为某个用户授予的所有角色都被视为这个用户的默认角色。

     ALTER USER user_name DEFAULT ROLE role_name[,role_name,...] | ALL [EXCEPT role_name[,role_name,...]] |NONE;  

      如果为用户授予一个需要口令的角色,并且将这个角色设置为默认角色,那么在使用为该角色授予的权限时,用户不需要输入口令。如果在指定默认角色时使用NONE,那么可以禁用被指派给用户的所有角色。此时用户只能使用直接授予的系统权限和对象权限或PUBLIC权限执行各种操作。

     启用与禁用角色(DBMS_SESSION.SET_ROLE) 

   SET ROLE ALL [EXCEPT role_name[,role_name,...]] |NONE|role_name [IDENTIFIED BY pwd][,role_name [IDENTIFIED BY pwd,...];    

 删除角色:

    删除角色,必须作为创建这个角色的,被授予DROP ANY ROLE系统权限的用户或作为使用WITH ADMIN OPTION被授予这个角色的用户才能操作。

    DROP ROLE role_name;

    配置文件是一个ORACLE对象。该对象允许DBA设置口令管理和资源限制。在创建数据库时也会创建一个DEFAULT的配置文件。该配置文件对口令、账户锁定及资源利用没有任何限制。    ORACLE只有在RESOURCE_LIMIT系统初始化参数设置为TRUE时才会实施资源限制。默认值为FALSE。

     创建、更改及删除配置文件

    对配置文件的修改不会应用于当前登录的用户,而是应用在用户下次连接服务器时。    CREATE[|ALTER] PROFILE profile_name LIMIT                              [SESSIONS_PER_USER     value]--用户同时具有的最大并发会话数    [CPU_PER_SESSION       value]--在一次会话中可以占用的CPU时间总量,单位为百分之一秒;一旦达到限制,用户会话就会终止并且出现一条ORACLE服务错误消息。为了重置这个限制,用户必须断开连接并进行再次连接;                                                      [CPU_PER_CALL           value]--单条SQL语句可以占用的CPU时间总量,单位为百分之一秒;一旦达到这个限制,SQL语句就会终止并且没有完成的任何事务都将回滚。用户会话保持连接状态。对数据库的每次调用都会重置这个限制;                                               [CONNECT_TIME          value]--用户保持与实例连接的最长时间,以分钟为单位    [IDLE_TIME             value]--用户在不执行任何数据库活动时保持与实例连接的最长时间,以分钟为单位;                                                                        [LOGICAL_READS_PER_SESSION   value]--用户在其会话期间允许读取的数据块数(包括来自磁盘的物理数据块及来自数据库高速缓存区的逻辑数据块)。一旦读取完这个参数所指定的数据块数,用户就需要启动另一个会话,从而能够继续访问数据库中的数据;    [LOGICAL_READS_PER_CALL      value]--用户执行一条SQL语句时允许读取的数据块数(包括来自磁盘的物理数据块及来自数据库高速缓存区的逻辑数据块)。一旦读取完这个参数所指定的数据块数,这条SQL语句将会终止,并且没有完成的任何事务都将回滚;    [COMPOSITE_LIMIT             value]--指定下列4种资源限制的加权平均值:CPU_PER_SESSION,CONNECT_TIME,LOGICAL_READS_PER_SESSION,PRIVATE_SGA。如果这4个参数的加权平均值超过了此限制,用户会话将终止。                                [PRIVATE_SGA bytes [K|M] ]         --在多线程服务器MTS环境中,指定用户会话在SGA中能够占用的最大字节数,如果没有使用MTS连接来连接数据库实例,可以忽略该参数。

    创建配置文件后如果没有将其指定给用户,则该配置文件不会被使用。

   可以为任何配置文件资源限制指定关键字UNLIMIYED,从而不会影响对资源的限制。

   创建或更改一个配置文件时为所有配置都指定关键字DEFAULT,这将指派DEFAULT配置文件的各种资源限制值。如果DEFAULT配置文件对新建配置文件中一个被指定为DEFAULT的资源限制产生影响,那么二者会得到相同的限制。   

 DROP PROFILE profile_name [CASCADE];  

  如果没有指定CASCADE选项,删除一个配置文件时就会要求这个配置文件没有被指派给任何用户。如果用CASCADE选项,被指派这个配置文件的用户就会被自动指派默认的配置文件。

    因为数据库中必须存在DEFAULT配置文件所以这个文件不能删除;MONITORING_PROFILE配置文件也不能被删除,因为ORACLE需要这个配置文件在数据库内执行系统监视功能。可通过查询DBA_PROFILES视图查看当前已配置的配置文件参数值。   

为用户指派配置文件  

在任意时间,用户都只具有一个有效的配置文件。  

 ALTER USER user_name PROFILE profile_name;

   普通用户除可更新其用户口令外,不能对其用户账户进行任何更改。

 

 

八、管理数据库对象   

 模式对象是用户拥有的对象。

    非模式对象与用户无关,例如表空间。在某些情况下,非模式对象是用户SYS拥有的对象,并且可以被所有用户访问。这种非模式对象包括公共的同义词与公共的数据库链接。

    除数据库链接名最多可为128个字符外,模式对象名最多为30个字符;   

保留字不能做为对象名;   

所有对象名必须以字母打头,且只能包含字母,数字,下划线,$和#;

    在双引号中封装名称就不用遵循以上原则(除长度限制外)。

            命名空间定义了一组对象类型,这组对象类型内的所有名称必须通过模式与名称被惟一标识;   

下列对象类型可以共享相同的命名空间:

     表,视图,序列,私有同义词,独立的过程,独立的函数,程序包,物化视图,自定义类型;   

以上对象类型在相同的模式下必须拥有不同的名称;

     下列对象类型具有各自的命名空间:

     索引,约束,群集,数据库触发器,私有的数据库链接,维。

     以上对象类型在相同的模式内可与其他对象类型同名,但对于相同类型则不能同名。如:一个索引在同一模式下可能具有与某个表相同的名字,但是不能存在两个相同的索引名。

      视图可以增加数据安全性,可以简化数据的显示,但不能改善性能。

     DATE和TIMESTAMP均可以秒为单位来记录日期/时间值;

     一个事务由两条语句组成,如果其中第一条语句执行成功,第二条语句因违反约束而失败,则第二条语句会完全回滚,但第一条语句的执行结果会保留,但不会提交;

 

     九、操纵数据库数据  

       数据库事务的ACID测试:

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

    一致性:查询的结果必须与查询开始时的状态一致;   

 隔离性:未完成的(也就是未提交的)事务必须不可视;

    持久性:一旦使用COMMIT结束某个事务,就必须保证数据库不丢失这个事务;

     执行SELECT语句的过程:一条SELECT语句分阶段执行。执行SELECT语句的服务器进程首先会查看包含所需数据的数据块是否已经位于内存和数据库高速缓存区中。如果条件成立,那么执行就会立即继续执行。如果条件不成立,服务器必须在磁盘上定位相应的数据块,并将数据块复制至数据库高速缓存区内。只要查询所需的数据块位于数据库高速缓存区内,进一步的处理如排序或聚集操作就在指定会话的PGA中完成。执行完成后,将结果集返回给用户进程。    服务器进程是将数据块从数据文件读取至数据库高速缓存区,而DBWn进程则是将数据块从数据库高速缓存区写入数据文件,这两个过程刚好相反。    ORA-1555:snapshot too old(快照过旧)的原因一般是需要回滚的数据块不再位于撤销段内。

    撤销不是重做的逆过程。对于表段,索引段或撤销段的数据块的变化来说,重做可以保护所有的数据块变化。就重做而言,撤销段只是一个段,对这个段所做的任何变化都必须是持久的。   

    执行UPDATE操作的过程:   

1.在内存中找到所需的数据块或将所需的数据块从磁盘复制到内存;

    2.在DML操作影响的所有记录以及关联索引键上放置锁定;   

3.生成重做。服务器进程在日志缓冲区中写入即将应用于指定数据块的变化。这个重做生成操作应用于数据块的变化和撤销块的变化。如果要更新某列,则该列的新值和旧值都会被写入日志缓冲区,如果该列是某索引键的一部分,则应用于该索引的变化以及保护索引变化的撤销块变化也会被写入日志缓存区;   

 4.生成重做后就可在数据库高速缓存区内完成下列更新操作:使用变化后的列更新表数据块,未变化的列则被写入撤销段数据块。从这一时刻到提交更新操作的时候,与发生变化的记录相关的其他会话中的所有查询都会被重定向至撤销数据。只有执行更新操作的会话可以在表数据块中看见更新后的记录。所有关联的索引变化同样也会应用上述原则。

        执行INSERT和DELETE的过程:    INSERT和DELETE与UPDATE具有相同的管理方式。其中重做生成操作完全相同,对数据块和撤销块进行的所有变化都会首先被写入日志缓冲区。二者的区别在于所生成的撤销数据量不同。插入一条记录时,生成撤销的操作只涉及为撤销块写下新的ROWID;对于DELETE来说,因为整条记录都会被入撤销块,所以在必要时通过在表中插回记录就可回滚删除操作。

     回滚机制:回滚UPDATE语句时,未被更新的列会从撤销块复制回表数据块;回滚INSERT时,ORACLE会从撤销段中检索插入记录的ROWID,并将其用作在表上进行删除的键;回滚DELETE时,ORACLE会根据撤销块中的数据构造一条完整的插入语句。回滚在执行时会自己生成更多的重做,重做可能多于原有的语句。

      提交操作:执行COMMIT命令时发生的所有物理操作是LGWR进程将日志缓冲区的内容写入磁盘。DBWn进程完全没有执行任何操作。这是一个非常重要的特性。

              为了使某个事务持久,所需的全部工作是将组成这个事务的变化写入磁盘而不必在磁盘上写入实际的数据。如果变化以多重重做日志文件的形式存储在磁盘上,那么在出现数据库受损的事件时,通过从数据库受损前所做的备份中还原数据文件及应用重做日志中的变化,就可以恢复事务。执行COMMIT命令只涉及将日志缓冲区的内容写入磁盘及标记事务的完成。

        DBWn进程与提交处理没有关系,但最终这个进程会将变化了的或脏的数据块写入磁盘。在正常运行期间,DBWn进程只会将某些脏缓冲区写入磁盘,在需要某个检查点时,DBWn进程会将所有的脏缓冲区写入磁盘。

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

     Data Pump文件类型:SQL文件,日志文件及转储文件;

    ORACLE目录始终属于SYS用户,为了创建目录,必须被授予适当的权限:CREATE DIRECTORY。   

与其他DML操作一样,外部表路径插入操作使用了一个正规的提交。直接路径操作并不使用提交,而是简单地将高水印向上移动,从而能够包含最新写入的数据块。

    Data Pump将数据上载至某个表中,并且希望使用直接路径,则如果这个表在某个群集内,那么该操作是不可能完成的;必须首先在该表上禁用插入触发器;无法进行控制,如果允许的话,Data Pump会自动使用直接路径。

 

    十、PL/SQL编程   

 PL/SQL代码可以被某个用户进程调用,并且存储在数据字典内,在实例内运行。 

   编译PL/SQL代码时,得到的结果存储位置取决于PLSQL_CODE_TYPE.本地编译代码被存储在一个操作系统文件内,而解释代码则被存储在数据字典内。

    SQL是一种面向集合的语言。   

 可以用EXECUTE来执行存储过程,但不能执行函数;

触发器由触发事件来运行。   

 

 十一、保护ORACLE数据库的安全

     决定访问计算机系统时需要遵循的最安全原则是最小权限原则,即用户应当只具有执行其任务所需的最小权限,并且禁止所有未被特别允许的权限。在ORACLE环境中,实现这个功能的第一

【上篇】
【下篇】

抱歉!评论已关闭.