oracle数据库管理

数据库管理

1.数据库管理员(dba)
   Ⅰ.职责:①安装和升级Oracle数据库
             ②建库,表空间,表,视图,索引。。。
             ③制定并实施备份与恢复计划
             ④数据库权限管理,调优,故障排除
             ⑤对于高级dba,要求能参与项目开发,
                 会编写sql语言、存储过程、触发器、规范、约束和包

   Ⅱ.管理数据库的用户主要是sys和system,这两个用户的主要区别是:

       ①最主要的区别:存储的数据的重要性不同

        sys:所有Oracle的数据词典的基表和视图都存放在sys用户中,这些基表
             和视图对于Oracle的运行是至关重要的,由数据库自己维护,任何用户
             都不能手动更改。sys用户拥有dba、sysdba和sysoper角色或权限,
             是Oracle权限最高的用户。

        system:用于存放次一级的内部数据,如Oracle的一些特性或工具的管理信息,
                system用户拥有dba,sysdba角色或权限

         ②其次的区别,权限的不同

        sys用户必须以as sysdba或 as sysoper形式登录,不能以normal方式登录数据库。
        也就是说不能用conn sys/change_on_install;方式登录,必须使用as指明角色,即
        conn sys/change_on_install as sysdba [或者as sysoper};
       
        system如果正常登录conn system/manager,它其实是一个普通的dba用户,
        但是如果以as sysdba登录,其结果实际上作为sys用户登录的,
        从登录信息里面我们可以看出来。

   Ⅲ.sysdba和sysoper具体权限

       sysdba的具体权限:

        ①Startup/Shutdown  启动数据库/关闭数据库
        ②alter database open/mount/backup
        ③改变字符集
        ④create database/drop database  创建数据库/删除数据库
        ⑤create spfile
        ⑥alter database archivelog  归档日志    
        ⑦alter database recover     恢复数据库
        ⑧拥有restricted session  会话限制权限
        ⑨可以让sys用户连接
        ⑩登录之后用户是sys

       sysdba的具体权限:

        ①Startup/Shutdown  启动数据库/关闭数据库
        ②alter database open/mount/backup
        ③不能改变字符集 (与sysdba不同)
        ④不能创建数据库/删除数据库  (与sysdba不同)
        ⑤create spfile
        ⑥alter database archivelog  归档日志    
        ⑦只能完全恢复,不能执行不完全恢复  (与sysdba不同)
        ⑧拥有restricted session  会话限制权限
        ⑨可以进行一些基本操作,但不能查看用户数据 (与sysdba不同)
        ⑩登录之后用户是public (与sysdba不同)

       补充dba用户权限:只有在启动数据库后,才能执行各种管理工作


    Ⅳ.管理初始化参数

     初始化参数用于设置实例或是数据库的特征。
     
      ①显示初始化

        show parameter;

      ②修改参数

      如果需要修改初始化参数,可以到文件..\oracle\admin\myoral\pfile\init.ora
      中去修改,比如说修稿实例的名字


2.数据库(表)的逻辑备份与恢复

     备份:使用工具export将数据对象的结构和数据导出到文件的过程
     逻辑恢复:实用工具import将备份的文件中数据对象导入数据库的过程

     注意:物理备份在数据库open/close的状态下都可以进行
           逻辑备份和恢复这能在open的状态下进行。

        Ⅰ.导出

      导出分为三种方式: 导出表、导出方案和导出数据库

      导出使用exp命令来完成,该命令的常用选项有:

        userid:导出执行该操作的用户名、口令和连接字符串
        tables:导出操作的表
        owner:导出操作的方案
        fully = y:导出操作的数据库
        imctype:导出操作的增量类型
        rows:是否导出表中的数据
        file: 导出文件名
        direct = y:导出表的结构

     ①导出表

       导出自己的表:
       exp userid = scott/scott@ORCL table = (emp,dept) file = d:\e1.dmp;

       导出其他方案的表:
       如果用户要导出其他方案的表,则需要dba权限或是exp_full_database的权限,
       比如system就可以导出scott的表
       exp userid = system/manager@ORCL table = (scott.emp) file = d:\e2.dmp

       导出表的结构:
       exp userid = scott/scott@ORCL table = (emp,dept) file = d:\e3.dmp rows = n;

       使用直接导出方式:
       exp userid = scott/scott@ORCL tables = (emp) file = d:\e3.demp direct =y;
       这时需要数据库的字符集与客户端的一致,否则会报错

     ②导出方案

        导出方案指使用export工具导出一个或多个方案中所有的对象和数据,并存在文件中。

      导出自己的方案:
        exp scott/scott@ORCL owner = scott file = d:\scott.dmp;

      导出其它方案:
        如果用户要导出其他方案,则需要dba的权限或是exp_full_database的权限
        system用户可以导出任何方案
        exp system/manager@ORCL owner = (system,scott) file = d:\system.dmp;
    

      ③导出数据库
         导出数据库是指利用export导出所有数据库中的对象及数据,要求该用户具有dba的权限,
         或是exp_full_database的权限
         exp userid = system/manager@ORCL full = y inctype = complete file = x.dmp;
         
             
      Ⅱ.导入

        使用工具import将文件中的对象和数据导入到数据库中,导入的文件一定要是export导出的文件。
        分为三种:导入表、导入方案和导入数据库
        imp常用的选项有:
       
        userid: 用于选定执行导入操作的用户名,口令和连接字符串
        tables: 指定执行导入操作的表
        formuser:指定源用户
        touser:用于指定目标用户
        file:用于指定导入文件名
        fully = y:用于指定执行导入整个文件
        inctype:用于指定执行导入操作的增量类型
        rows:指定是否要导入表行(数据)
        ignore:如果表存在,则只导入数据


       ①导入表
       
       导入自己的表
       imp userid = scott/scott@ORCL table = (emp) file = d:\xx.dmp

       导入表到其他用户
       要求该用户具有dba的权限,或是imp_full_database
       imp userid = system/manager@ORCL tables = (emp) file = d:\xx.dmp touser = scott;
       
       导入表的结构
       只导入表的结构,不导入数据
       imp userid = scott/scott@ORCL tables = (emp) file = d:\xxx.dmp rows= n;

       ②导入数据
       如果对象(比如表)已经存在可以只导入表的数据
       imp userid = scott/scott@ORCL tables = (emp) file = d:\xxx.dmp ignore =y;      
       --有外键的表不能导入别的方案里去
       
       ③导入方案
       使用import将文件的对象和数据导入到一个或是多个方案中。
       如果要导入其他方案,要求该用户具有dba权限,或是imp_full_database

       导入自身的方案
       imp userid = scott/scott file = d:\xxx.dmp;
       导入其他方案
       imp userid = system/manager file = d:\xxx.dmp formuser = scott;
       导入数据库
       默认情况下,导入数据库时,会导入所有对象结构和数据
       imp userid = system/manager full =y file = d:\xxx.dmp;

       DOS中dir命名: 查看目录

 

3.数据字典和动态性能视图


        数据字典是oracle数据库中最重要的组成部分,
        它提供了数据库的一些系统信息。(静态的信息)
        动态性能视图记载了例程启动后的相关信息。(动态的信息)

    Ⅰ.数据字典

         数据字典记录了数据库的系统信息,它是只读表和视图的集合,
         数据字典的所有者为sys用户。

         用户只能在数据字典上执行select操作,而其维护和修改是由系统自动完成的。

         数据字典包括:数据字典基表和数据字典视图

         基表存储数据库的基本信息,普通用户不能直接访问
         数据字典视图是基于数据字典基表建立的视图,普通用户可以查询它而取得系统信息
     
       ①数据字典视图主要包括三种类型:user_xxx,all_xxx和dba_xxx.

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

           all_tables
            用于显示当前用户可以访问的所有的表
            select table_name from all_tables;

           dba_tables
            显示所有方案拥有的数据库表,但要求用户必须是dba角色或select any table系统权限。


       ②用户名,权限,角色
   
              建立用户时,oracle会把用户的信息存放到数据字典中,
              当给用户授予权限或是角色时,oracle会将权限和角色的信息存放到数据字典
             通过查询dba_users可以显示所有数据库用户所具有的系统权限;
             通过查询数据字典视图dba_sys_privs,可以显示用户所具有的系统权限
             通过查询数据字典视图dba_tab_privs, 可以显示用户具有的对象权限
             通过查询数据字典视图dba_col_privs,可以显示用户具有的列权限
             通过查询数据字典视图dba_role_privs,可以显示用户所具有的角色
          
         例:select * from dba_role_privs where GRANTEE = 'SCOTT';
              --查看用户具有怎样的角色

      
             查询oracle中所有的系统权限,一般是dba
              select * from system_privilege order by name;

             查询oracle中所有的角色,一般是dba
              select * from dba_roles;

             查询oracle中所有对象权限,一般是dba
              select distinct privilege from dba_tab_privs;

             查询数据库的表空间
              select tablespace_name from dba_tablespaces;

             查询角色具有哪些系统权限
              select *from dba_sys_privs where grantee ='DBA';
             或者
              select *from dba_sys_privs where role ='DBA';

             查询某个角色包括的对象权限
              select * from dba_tab_privs where grantee = '角色名';

              显示当前用户可以访问的所有数据字典的视图
               select * from dict where comments like '%grant%';

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


      Ⅱ.动态性能视图
         
         用于记录当前历程的活动信息
         当启动oracle server时,系统会建立动态性能视图
         当停止oracle server时,系统会删除动态性能视图

         oracle所有动态性能视图都是以v_$开始的,并且oracle为每个动态性能视图
         提供了相应的同义词,并且其同义词是以V$datafile;动态性能视图的所有者为sys,
         一般情况下,由dba或是特权用户来查询动态性能视图。


      Ⅲ.管理表空间和数据文件

         表空间是数据库的逻辑组成部分。
         从物理上讲,数据库数据存放在数据文件中
         从逻辑上讲,数据库则是存放在表空间中,表空间由一个或是多个数据文件组成。

         ①数据库的逻辑结构
           oracle中逻辑结构包括表空间、段、区和块。
           块→区→段→表空间→数据库
           这种结构可以提高数据库的效率

         ②表空间
           表空间用于从逻辑上组织数据库的数据。
           数据库逻辑上是由一个或多个表空间组成。

           表空间可以达到以下作用:
            a.控制数据库占用的磁盘空间
            b.dba可以将不同的数据类型部署到不同的位置,
              这样有利于提高i/o性能,同时利于备份和恢复等管理操作。

           建立表空间
             create tablespace 需要特权用户或是dba来执行,如果用其它用户来
                               创建表空间,则需要具有create tablespace系统权限
          
           建立数据表空间
             建立名称为data1的表空间,并为该表空间建立名称为data1.dbf的数据文件
             区的大小为128k
             create tablespace data01 datafile ‘d:\test\data1.dbf’
             size 20m uniform size 128k

            使用数据表空间
             create table mypart (deptno, number(4),dname varchar2(14),
                loc varchar2(13)) tablespace data1;
             --如果不指定表空间,则默认在system目录下

             改变表空间的状态
             表空间在联机状态,此时是可以访问和读写的,
             有时为了维护(数据维护或系统维护)可以改变表空间状态,但一般情况下,
             由特权用户或是dba来操作。

              a.使表空间脱机
                alter tablespace 表空间名 offline;

              b.使表空间联机
                alter tablespace 表空间名 online;

              c.只读表空间
                alter tablespace 表空间名 read only;

               补充:恢复可写
                alter tablespace 表空间名 read write;

               只读特性:

               知道表空间名,显示该表空间包括的所有表
                select * from all_tables where tablespace_name = '表空间名';

               知道表名,查看该表属于哪个表空间
                select tablespace_name,table_name from user_tables
                 where table_name = 'emp';

          删除表空间
   
             一般情况下,由特权用户或是 dba 来操作,如果是其它用户操作,
              那么要求用户具drop tablespace 系统权限。   
               drop tablespace‘表空间’including contents and datafiles;   
                说明:including contents 表示删除表空间时,删除该空间的所有数据库对象, 
                     而 datafiles 表示将数据库文件也删除。  

          扩展表空间

             表空间溢出,需要为其拓展表空间,会报错“表。。无法通过32(在表空间。。。中)扩展”
               为其增加更多的存储空间,有三种方法:
            
            a.增加数据文件
               alter tablespace spo1 add datafile 'd:\test\sp01.dbf' size 20m;

            b.增加数据文件的大小
               alter tablespace datafile 'd:\test\sp01.dbf' resize 20m;
               注意数据文件大小不要超过500m

            c.设置文件的自动增长
               alter tablespace datafile 'd:\test\sp01.dbf' autoextend on next 10m maxsize 500;


          移动数据文件

            有时,如果数据文件所在磁盘损坏时,该数据文件将不能再使用,为了能够重新使用,
            需要将这些文件的副本移动到其它的磁盘,然后恢复。

            例:移动数据文件sp001.dbf为例

              a.确定数据文件所在的表空间
              select tablespace_name from dba_data_files where
               file_name = 'd:\sp001.dbf';

              b.使表文件脱机
               alter tablespace sp001 offline;

              c.使用命令移动数据文件到指定的目标位置
               host move d:\sp001.dbf  c:\sp01.dbf;  

              d.执行alter tablespace 命令
                物理移动后,还需要对数据库文件进行逻辑修改
               alter tablespace sp001 rename datafile 
               'd:\sp001.dbf' to 'c:\sp001.dbf';

              e.表空间联机
                为了使用户能够访问该表空间,必须将其转为online状态:
                alter tablespace data01 online;

           
           显示表空间信息
              select tablespace_name from dba_tablespaces;

           显示表空间所包含的数据文件
              select file_name,bytes from dba_data_files 
               where tablespace_name = '表空间名';

           其它表空间   
              除了最常用的数据表空间外,还有其它类型表空间:   
              a.索引表空间   --单建索引表空间可以提高速度
              b.undo 表空间   
              c.临时表空间   
              d.非标准块的表空间 

你可能感兴趣的:(oracle数据库管理)