现在的位置: 首页 > 数据库 > 正文

3.4 数据库相关基础

2019年09月28日 数据库 ⁄ 共 21241字 ⁄ 字号 评论关闭

3.4 数据库相关基础
  数据库基础10-20
  数据库应用10-20
  数据库架构和扩展10-20
---------------------------------------------------
  3.4.1数据库基础 ---------------------------------
     3.4.1.1 这段代码有什么不足之处?
    try {
      Connection conn = ...;
      Statement stmt = ...;
      ResultSet rs = stmt.executeQuery("select * from table1");
      while(rs.next()) {}
    } catch(Exception ex) { }
    答:没有finally语句来关闭各个对象,另外,使用finally之后,要把变量的定义放在try语句块的外面,以便在try语句块之外的finally块中仍可以访问这些变量。

     3.4.1.2 不借助第三方工具,怎样查看sql的执行计划?
         set autot on
         explain plan set statement_id = &item_id for &sql;
         select * from table(dbms_xplan.display);

  3.4.2数据库应用 ---------------------------------
    3.4.2.1 大数据量下的分页解决方法。
    答:最好的办法是利用sql语句进行分页,这样每次查询出的结果集中就只包含某页的数据内容。再sql语句无法实现分页的情况下,可以考虑对大的结果集通过游标定位方式来获取某页的数据。
    sql语句分页,不同的数据库下的分页方案各不一样,下面是主流的三种数据库的分页sql:
    sql server:
           String sql =
           "select top " + pageSize + " * from students where id not in" +
           "(select top " + pageSize * (pageNumber-1) + " id from students order by id)" +
               "order by id";
    mysql:
           String sql =
           "select * from students order by id limit " + pageSize*(pageNumber-1) + "," + pageSize;          
    oracle:    
           String sql =
             "select * from " +
              (select *,rownum rid from (select * from students order by postime desc) where rid<=" + pagesize*pagenumber + ") as t" +
             "where t>" + pageSize*(pageNumber-1);
     3.4.2.2 oracle index ?
        1.index需要储存空间和I/O操作。
    2.index的目的是加快select的速度的。
    3.insert,update,delete数据oracle会同时对索引进行相应的调整,因此会增加一定的消耗。
    4.使用index一定能加快select速度吗?不是的,数据少和巨大时index会影响select的速度,因此如果查询速度可以满足,就不要建index。
    5.Index 对null 无效。
        说说索引的组成?
        索引列、rowid

    3.4.2.3 数据库性能优化主要一下几个方面:?
        1、sql语句的执行计划是否正常
    2、减少应用和数据库的交互次数、同一个sql语句的执行次数
    3、数据库实体的碎片的整理(特别是对某些表经常进行insert和delete动作,尤其注意,索引字段为系列字段、自增长字段、时间字段,对于业务比较频繁的系统,最好一个月重建一次)
    4、减少表之间的关联,特别对于批量数据处理,尽量单表查询数据,统一在内存中进行逻辑处理,减少数据库压力(java处理批量数据不可取,尽量用c或者c++ 进行处理,效率大大提升)
    5、对访问频繁的数据,充分利用数据库cache和应用的缓存
    6、数据量比较大的,在设计过程中,为了减少其他表的关联,增加一些冗余字段,提高查询性能

    3.4.2.4 Oracle用了多久?char与varchar2的区别?
    Char是固定长度字符串,varchar2是变长字符串。
    比如在char(10)和varchar2(10)中插入test字符串那么char(10)类型长度就是10,不足的用空格补齐,而varchar2(10)类型长度就是4。

    3.4.2.5 如何跟踪某个session的SQL?
        exec dbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);
    select sid,serial# from v$session where sid = (select sid from v$mystat where rownum = 1);
    exec dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,”);

  3.4.3数据库架构和扩展 ---------------------------------
   3.4.3.1 ACID, BASE和CAP概念解释?
        分布式领域CAP理论
    Consistency(一致性), 数据一致更新,所有数据变动都是同步的,最终一致性
    Availability(可用性), 好的响应性能
    Partition tolerance(Tolerance of network Partition分区容错性) 网络分区容忍性(可理解为部分节点故障或节点之间连接故障下系统仍可正常工作)
    定理:任何分布式系统只可同时满足二点,没法三者兼顾。
    忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。
    什么是ACID?
      DBMS 强调ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性 (Durability)。其中的一致性强调当程序员定义的事务完成时,数据库处于一致的状态,如对于转帐来说,事务完成时必须是A少了多少钱B就多了多 少钱。
    什么是BASE?
     BASE:Basically Availble --基本可用;Soft-state --;Eventual Consistency --最终一致性
   3.4.3.2 说出数据连接池的工作机制是什么?
    J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
    实现方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正关连接,而是把它代理的Connection对象还回到连接池中。
   3.4.3.3 DELETE和TRUNCATE的区别?
    答:1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。
      2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
      3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。
      4、TRUNCATE不能触发任何DELETE触发器。
      5、不能授予任何人清空他人的表的权限。
      6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
      7、不能清空父表。
        比较truncate和delete 命令?
    解答:两者都可以用来删除表中所有的记录。区别在于:
         truncate是DDL操作,它移动HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花费较长时间.

   3.4.3.4 索引重建的概念? 说说索引重建的意义?
    当我们创建索引时,oracle会为索引创建索引树,表和索引树通过rowid(伪列)来定位数据。当表里的数据发生更新时,oracle会自动维护索引树。但是在索引树中没有更新操作,只有删除和插入操作。
    例如在某表id列上创建索引,某表id列上有值“101”,当我将“101”更新为“110”时,oracle同时会来更新索引树,但是oracle先将索引树中的“101”标示为删除(实际并未删除,只是标示一下),然后再将“110”写到索引树中。
    如果表更新比较频繁,那么在索引中删除标示会越来越多,这时索引的查询效率必然降低,所以我们应该定期重建索引。来消除索引中这些删除标记。
    一般不会选择先删除索引,然后再重新创建索引,而是rebuild索引。在rebuild期间,用户还可以使用原来的索引,并且rebuild新的索引时也会利用原来的索引信息,这样重建索引会块一些。

   3.4.3.5 如何查看生产环境数据库服务器SQL性能状态?
        TKPROF SQL trace 工具收集正在执行的SQL的性能状态数据并记录到一个跟踪文件中。 这个跟踪文件提供了许多有用的信息,例如解析次数。执行次数,CPU使用时间等。这些数据将可以用来优化你的系统。
     设置SQL TRACE在会话级别:
     有效
     ALTER SESSION SET SQL_TRACE TRUE
     设置SQL TRACE 在整个数据库有效性, 你必须将SQL_TRACE参数在init.ora中设为TRUE, USER_DUMP_DEST参数说明了生成跟踪文件的目录
     (译者按: 这一节中,作者并没有提到TKPROF的用法, 对SQL TRACE的用法也不够准确, 设置SQL TRACE首先要在init.ora中设定TIMED_STATISTICS, 这样才能得到那些重要的时间状态。 生成的trace文件是不可读的,所以要用TKPROF工具对其进行转换,TKPROF有许多执行参数。 大家可以参考ORACLE手册来了解具体的配置。 )

===========================================================================================================
阿里巴巴数据库管理员的面试题 http://www.itpub.net/thread-947150-1-1.html
                 http://www.douban.com/group/topic/2665514/
一:SQL tuning 类

  1:列举几种表连接方式
  2:不借助第三方工具,怎样查看sql的执行计划
  3:如何使用CBO,CBO与RULE的区别
  4:如何定位重要(消耗资源多)的SQL
  5:如何跟踪某个session的SQL
  6:SQL调整最关注的是什么
  7:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)
  8:使用索引查询一定能提高查询的性能吗?为什么
  9:绑定变量是什么?绑定变量有什么优缺点?
  10:如何稳定(固定)执行计划
  11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么
  12:存在表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sql
  二:数据库基本概念类

  1:pctused and pctfree 表示什么含义有什么作用
  2:简单描述table / segment / extent / block之间的关系
  3:描述tablespace和datafile之间的关系
  4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点
  5:回滚段的作用是什么
  6:日志的作用是什么
  7:SGA主要有那些部分,主要作用是什么
  8racle系统进程主要有哪些,作用是什么
  三:备份恢复类

  1:备份如何分类
  2:归档是什么含义
  3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复
  4:rman是什么,有何特点
  5:standby的特点
  6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略
  四:系统管理类

  1:对于一个存在系统性能的系统,说出你的诊断处理思路
  2:列举几种诊断IO、CPU、性能状况的方法
  3:对statspack有何认识
  4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响
  5:对raid10 和raid5有何认识
  五:综合随意类

  1:你最擅长的是oracle哪部分?
  2:喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的哪一部分?
  3:随意说说你觉得oracle最有意思的部分或者最困难的部分
  4:为何要选择做DBA呢?
--------------------------------------------------------
  一:SQL tuning 类
  1:列举几种表连接方式?
        Answer:等连接(内连接)、非等连接、自连接、外连接(左、右、全)
    Or hash join/merge join/nest loop(cluster join)/index join
    ORACLE 8i,9i表连接方法:
    一般的相等连接:select * from a, b where a.id = b.id; 这个就属于内连接。
    对于外连接: Oracle中可以使用“(+) ”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN
    LEFT OUTER JOIN:左外关联
     SELECT e.last_name, e.department_id, d.department_name
         FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id);
    等价于
    SELECT e.last_name, e.department_id, d.department_name
    FROM employees e, departments d    WHERE e.department_id=d.department_id(+)
    结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。
     RIGHT OUTER JOIN:右外关联
    SELECT e.last_name, e.department_id, d.department_name
    FROM employees e RIGHT OUTER JOIN departments d
    ON (e.department_id = d.department_id);
    等价于
    SELECT e.last_name, e.department_id, d.department_name
    FROM employees e, departments d
    WHERE e.department_id(+)=d.department_id
    结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。
      FULL OUTER JOIN:全外关联
    SELECT e.last_name, e.department_id, d.department_name
    FROM employees e
    FULL OUTER JOIN departments d
    ON (e.department_id = d.department_id);
    结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。

    ORACLE8i是不直接支持完全外连接的语法,也就是说不能在左右两个表上同时加上(+),下面是在ORACLE8i可以参考的完全外连接语法
    select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+)
    union
    select t1.id,t2.id from table1 t1,table t2 where t1.id(+)=t2.id
    全外连接
    包含左、右两个表的全部行,不管在另一边的表中是否存在与它们匹配的行
    select A.c1,B.c2 from A full join B on A.c3 = B.c3;
    (theta)连接
    使用等值以外的条件来匹配左、右两个表中的行
    select A.c1,B.c2 from A join B on A.c3 != B.c3;
    交叉连接
    生成笛卡尔积——它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行一一匹配
    select A.c1,B.c2 from A,B;
  2:不借助第三方工具,怎样查看sql的执行计划?
       autotrace /utlxplan.sql
       I) 使用Explain Plan,查询PLAN_TABLE;
      EXPLAIN  PLAN
         SET STATEMENT_ID='QUERY1'
         FOR
         SELECT *
         FROM a
         WHERE aa=1;
      SELECT   operation, options, object_name, object_type, ID, parent_id
          FROM plan_table
         WHERE STATEMENT_ID = 'QUERY1'
      ORDER BY ID;
    II)SQLPLUS中的SET TRACE 即可看到Execution Plan Statistics
      SET AUTOTRACE ON;
       
  3:如何使用CBO,CBO与RULE的区别?
    在optimizer_mode=choose时,如果表有统计信息(分区表外),优化器将选择CBO,否则选RBO。
    RBO遵循简单的分级方法学,使用15种级别要点,当接收到查询,优化器将评估使用到的要点数目,然后选择最佳级别(最少的数量)的执行路径来运行查询。
    CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。
  4:如何定位重要(消耗资源多)的SQL?
        根据v$sqlarea中的逻辑读/disk_read。
        select sql_text from v$sql
    where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);
  5:如何跟踪某个session的SQL?
        答:先找出对应的'sid,serial',然后调用system_system.set_sql_trace_in_session(sid,serial,true);
        exec dbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);
    select sid,serial# from v$session where sid = (select sid from v$mystat where rownum = 1);
    exec dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,'');
  6:SQL调整最关注的是什么?
        逻辑读。查看该SQL的response time(db block gets/consistent gets/physical reads/sorts (disk))
  7:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)?
        答:默认的索引是b-tree.
    对insert的影响.(分裂,要保证tree的平衡)
    对delete的影响.(删除行的时候要标记改节点为删除).
    对update的影响,如果更新表中的索引字段,则要相应的更新索引中的键值。
    查询中包含索引字段的键值和行的物理地址。
        b-tree index/bitmap index/function index/patitional index(local/global)
    索引通常能提高select/update/delete的性能,会降低insert的速度,
  8:使用索引查询一定能提高查询的性能吗?为什么?
        答:不能。如果返回的行数目较大,使用全表扫描的性能较好。
        索引就是为了提高查询性能而存在的, 如果在查询中索引没有提高性能, 只能说是用错了索引,或者讲是场合不同
  9:绑定变量是什么?绑定变量有什么优缺点?
    答:通俗的说,绑定变量就是变量的一个占位符,使用绑定变量可以减少只有变量值不同的语句的解析。
        绑定变量是相对文本变量来讲的,所谓文本变量是指在SQL直接书写查询条件,这样的SQL在不同条件下需要反复解析,
        绑定变量是指使用变量来代替直接书写条件,查询bind value在运行时传递,然后绑定执行。优点是减少硬解析,降低CPU的争用,节省shared_pool ;缺点是不能使用histogram,sql优化比较困难

  10:如何稳定(固定)执行计划
        答:使用stored outline.
      query_rewrite_enabled = true
      star_transformation_enabled = true
      optimizer_features_enable = 9.2.0
      创建并使用stored outline
  11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么?
        答:8i:使用sort_area_size,hash_area_size,每个session分配相同的值,不管有无使用。
       9i: 使用pga_aggregate来统一管理。
       临时表空间的作用:
       在sort_area_size中不能完成的部分在临时表空间完成,临时表空间在重建索引,创建临时表等都要用到。
       还有hash join不能完成的也在临时表空间中做。
       8i中sort_area_size/sort_area_retained_size决定了排序所需要的内存
      如果排序操作不能在sort_area_size中完成,就会用到temp表空间
      9i中如果workarea_size_policy=auto时,
      排序在pga内进行,通常pga_aggregate_target的1/20可以用来进行disk sort;
      如果workarea_size_policy=manual时,排序需要的内存由sort_area_size决定
      在执行order by/group by/distinct/union/create index/index rebuild/minus等操作时,
      如果在pga或sort_area_size中不能完成,排序将在临时表空间进行(disk sort),
      临时表空间主要作用就是完成系统中的disk sort.
  12:存在表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sql
        select a,b,c,d from (select a,b,c,d from T order by c) where rownum<=30
    minus
    select a,b,c,d from (select a,b,c,d from T order by c) where rownum <=20;

        create table t(a number,b number,c number,d number);
    /
    begin
     for i in 1 .. 300 loop
      insert into t values(mod(i,2),i/2,dbms_random.value(1,300),i/4);
     end loop;
    end;
    /
    select * from (select c.*,rownum as rn from (select * from t order by c desc) c) where rn between 21 and 30;
    /
    select * from (select * from test order by c desc) x where rownum
    相比之 minus性能较差

  二:数据库基本概念类
  1:pctused and pctfree表示什么含义有什么作用?
       答:表示数据块什么时候重联接或者从freelist中删除。
    pctused:如果数据块的使用小于pctused的值,则该数据块重新加入到fresslist中。
    pctused:如果数据块的空闲空间小于pctfree的值,则该数据块从freelist中删除。

        pctused与pctfree控制数据块是否出现在freelist中,
      pctfree控制数据块中保留用于update的空间,当数据块中的free space小于pctfree设置的空间时,该数据块从freelist中去掉,
        当块由于dml操作free space大于pct_used设置的空间时,该数据库块将被添加在freelist链表中。
  2:简单描述table / segment / extent / block之间的关系?
        答:table是一个逻辑上的概念。
    segment表示结构的相同的一段空间。
    extent。多个block组成一个extent,便于dbms分配。
    block,多个os块组成一个block,是oracle i/o的单位。

       table创建时,默认创建了一个data segment,
      每个data segment含有min extents指定的extents数,
      每个extent跟据表空间的存储参数分配一定数量的blocks

  3:描述tablespace和datafile之间的关系
        答:
    tablespace是逻辑上的概念,datafile是物理上的概念。
    一个tablespace可以由多个datafile组成,一个datafile不能跨越多个tablespace。

        一个tablespace可以有一个或多个datafile,每个datafile只能在一个tablespace内,
    table中的数据,通过hash算法分布在tablespace中的各个datafile中,
    tablespace是逻辑上的概念,datafile则在物理上储存了数据库的种种对象。
  4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点
    答:一个使用freelist管理,一个使用位图管理。
        本地管理表空间(Locally Managed Tablespace简称LMT)
      8i以后出现的一种新的表空间的管理模式,通过位图来管理表空间的空间使用。
      字典管理表空间(Dictionary-Managed Tablespace简称DMT)
      8i以前包括以后都还可以使用的一种表空间管理模式,通过数据字典管理表空间的空间使用。
      动段空间管理(ASSM),
      它首次出现在Oracle920里有了ASSM,链接列表freelist被位图所取代,它是一个二进制的数组,
      能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储本质,
      ASSM表空间上创建的段还有另外一个称呼叫Bitmap Managed Segments(BMB 段)。
  5:回滚段的作用是什么
        答:保存数据的前像,保证数据读取的时间点一致性。
      事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,
      当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。
    事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中,
      ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。
      读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。
      当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)
      当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)
      来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,
      若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。
  6:日志的作用是什么
    答:纪录对数据库的操作,便于恢复。
        记录数据库事务,最大限度地保证数据的一致性与安全性
      重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件
      归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
  7:SGA主要有那些部分,主要作用是什么
        答:db_cache(缓存数据块),shared_pool(缓存sql,执行计划,数据字典信息等),large_pool(rman要用到),java pool(java程序时要用到)
        SGA:db_cache/shared_pool/large_pool/java_pool
    db_cache:
      数据库缓存(Block Buffer)对于Oracle数据库的运转和性能起着非常关键的作用,
      它占据Oracle数据库SGA(系统共享内存区)的主要部分。Oracle数据库通过使用LRU
      算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问.
    shared_pool:
      共享池的大小对于Oracle性能来说都是很重要的。
      共享池中保存数据字典高速缓冲和完全解析或编译的的PL/SQL块和SQL语句及控制结构
    large_pool:
      使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存
      使用RMAN做备份的时候,要使用Large_pool这个内存结构来做磁盘I/O缓存器
    java_pool:
      为java procedure预备的内存区域,如果没有使用java proc,java_pool不是必须的
    8:oracle系统进程主要有哪些,作用是什么?
      答:smon(合并空间,实例恢复),pmon(清理失败的进程),归档进程(负责在日志切换的时候归档日志文件),
          lgmr(日志书写器进程,负责写日志咯),ckpt(检查点进程,触发检查点),dbwr(数据库写入器,负责把数据写入导datafile)

          数据写进程(dbwr):负责将更改的数据从数据库缓冲区高速缓存写入数据文件
        日志写进程(lgwr):将重做日志缓冲区中的更改写入在线重做日志文件
        系统监控(smon) :检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复
        进程监控(pmon) :负责在一个Oracle进程失败时清理资源
        检查点进程(chpt):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。
        归档进程(arcn) :在每次日志切换时把已满的日志组进行备份或归档
        作业调度器(cjq) :负责将调度与执行系统中已定义好的job,完成一些预定义的工作.
        恢复进程(reco) :保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback;

  三:备份恢复类
  1:备份如何分类?
    答:逻辑备份(exp)与物理备份。或者冷备份与热备份。
       逻辑备份:exp/imp
      物理备份:RMAN备份
               full backup/incremental backup(累积/差异)
      热备份:alter tablespace begin/end backup;
      冷备份:脱机备份(database shutdown)
  2:归档是什么含义?
    关于归档日志:Oracle要将填满的在线日志文件组归档时,则要建立归档日志(archived redo log)。
      其对数据库备份和恢复有下列用处:
      数据库后备以及在线和归档日志文件,在操作系统和磁盘故障中可保证全部提交的事物可被恢复。
      在数据库打开和正常系统使用下,如果归档日志是永久保存,在线后备可以进行和使用。
      数据库可运行在两种不同方式下:
      NOARCHIVELOG方式或ARCHIVELOG方式数据库在NOARCHIVELOG方式下使用时,不能进行在线日志的归档,如果数据库在ARCHIVELOG方式下运行,可实施在线日志的归档。
  3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复
        拷贝备份,
        recove database until time 2004-08-04 10:30:00
        alter database open resetlogs;
        手工拷贝回所有备份的数据文件:
      startup mount;
      sql alter database recover automatic until time '2004-08-04:10:30:00';
      alter database open resetlogs;
  4:rman是什么,有何特点
    答:rman叫恢复管理器.
    特点很多。

    1:热备份。
    2:可以存储脚本。
    3:可以增量备份。
    4:自动管理备份集。
       RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库, RMAN可以用来备份和恢复数据库文件、归档日志、控制文件、系统参数文件,也可以用来执行完全或不完全的数据库恢复。RMAN有三种不同的用户接口:
     COMMAND LINE方式、GUI 方式(集成在OEM 中的备份管理器)、API 方式(用于集成到第三方的备份软件中)。
      具有如下特点:
      1)功能类似物理备份,但比物理备份强大N倍;
      2)可以压缩空块;
      3)可以在块水平上实现增量;
      4)可以把备份的输出打包成备份集,也可以按固定大小分割备份集;
      5)备份与恢复的过程可以自动管理;
      6)可以使用脚本(存在Recovery catalog 中)
      7)可以做坏块监测
    5:standby的特点
    答:利用传输重做日志来达到同步的目的。
        备用数据库(standby database):ORACLE推出的一种高可用性(HIGH AVAILABLE)数据库方案,
      在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份
      可以实现快速切换与灾难性恢复,从920开始,还开始支持物理与逻辑备用服务器。
      9i中的三种数据保护模式分别是:
      1)、MAXIMIZE PROTECTION :最大数据保护与无数据分歧,LGWR将同时传送到备用节点,
      在主节点事务确认之前,备用节点也必须完全收到日志数据。如果网络不好,引起LGWR不能传送数据,将引起严重的性能问题,导致主节点DOWN机。
      2)、MAXIMIZE AVAILABILITY :无数据丢失模式,允许数据分歧,允许异步传送。
      正常情况下运行在最大保护模式,在主节点与备用节点的网络断开或连接不正常时,自动切换到最大性能模式,
      主节点的操作还是可以继续的。在网络不好的情况下有较大的性能影响。
      3)、MAXIMIZE PERFORMANCE:这种模式应当可以说是从8i继承过来的备用服务器模式,异步传送,
      无数据同步检查,可能丢失数据,但是能获得主节点的最大性能。9i在配置DATA GUARD的时候默认就是MAXIMIZE PERFORMANCE

    6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略
       答:每天一个全备份。
       rman/每月一号 level 0
       每周末/周三 level 1
       其它每天level 2

  四:系统管理类
  1:对于一个存在系统性能的系统,说出你的诊断处理思路
       答:做一个statspack,根据top 5,system load,top sql等来做相应的调整。
       1) 做statspack收集系统相关信息
        了解系统大致情况/确定是否存在参数设置不合适的地方/查看top 5 event/查看top sql等
     2) 查v$system_event/v$session_event/v$session_wait
        从v$system_event开始,确定需要什么资源(db file sequential read)等
        深入研究v$session_event,确定等待事件涉及的会话
        从v$session_wait确定详细的资源争用情况(p1-p3的值:file_id/block_id/blocks等)
     3) 通过v$sql/v$sqltext/v$sqlarea表确定disk_reads、(buffer_gets/executions)值较大的SQL
  2:列举几种诊断IO、CPU、性能状况的方法
       答:
    hp-unix:iostat -x 1 5;
    top/vmstat/glance
        top/vmstat
    statspack
    sql_trace/tkprof(名词解释:TKPROF stands for transient kernel profiler./tool kit profiler/trace kernel profiler)
    查v$system_event/v$session_event/v$session_wait
    查v$sqlarea(disk_reads或buffer_gets/executions较大的SQL)
  3:对statspack(中文统计包)有何认识?
      答:一个性能诊断工具而已咯,其本质就是在两个时间点采样两个系统数据。(动态性能视图)
     然后根据两个snapshot,产生一个报告。
         StapSpack是Oracle公司提供的一个收集数据库运行性能指标的软件包,该软件包从8i起,在9i、10g都有显著的增强。该软件包的辅助表(存储相关参数与收集的性能指标的表)由最初的25个增长到43个。收集级别参数由原来的3个(0、5、10)增加到5个(0、5、 6、7、10)通过分析收集的性能指标,数据库管理员可以详细地了解数据库目前的运行情况,对数据库实例、等待事件、SQL等进行优化调整。利用 statspack收集的snapshot,可以统计制作数据库的各种性能指标的统计趋势图表。

  4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响
        1:增大sort_area_size(8i)/pga_aggregate_target(9i)值。
    2:用并行的方式来建。
    3:系统空闲的时候建。
        在系统比较空闲时;nologging选项(如果有dataguard则不可以使用nologging)大的sort_ared_size或pga_aggregate_target较大

  5:对raid10 和raid5有何认识
      RAID 10(或称RAID 1+0)与RAID 0+1不同,它是用硬盘驱动器先组成RAID 1阵列,然后在RAID 1阵列之间再组成RAID 0阵列。RAID 10模式同RAID 0+1模式一样具有良好的数据传输性能,但却比RAID 0+1具有更高的可靠性。RAID 10阵列的实际容量为M×n/2,磁盘利用率为50%。RAID 10也需要至少4个硬盘驱动器构成,因而价格昂贵。 RAID 10的可靠性同RAID 1一样,但由于RAID 10硬盘驱动器之间有数据分割,因而数据传输性能优良。
      RAID 5与RAID 3很相似,不同之处在于RAID 5的奇偶校验信息也同数据一样被分割保存到所有的硬盘驱动器,而不是写入一个指定的硬盘驱动器,从而消除了单个奇偶校验硬盘驱动器的瓶颈问题。RAID 5磁盘阵列的性能比RAID 3有所提高,但仍然需要至少3块硬盘驱动器。其实际容量为M×(n-1),磁盘利用率为(n-1)/n 。

  五:综合随意类
  1:你最擅长的是oracle哪部分?
      答:性能/sql 调优。
  2:喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的哪一部分?
      http://www.itpub.net/forum-2-1.html
  3:随意说说你觉得oracle最有意思的部分或者最困难的部分
      答:性能调优。
  4:为何要选择做DBA呢?
      爱好

=============
MYSQL面试题大全
1 mysql你都修改了那些配置文件来进行优化(问配置文件中具体修改的内容)?
2 数据库用的什么?mysql用了几台?是否做读写分离?主从复制做了读写分离,主挂了或者从挂了你怎么办?
3 mysql出现过什么问题,如何解决的?
4 mysql如何创建一个库,添加一个表,在表中插入数据。
5 mysql做过什么优化
6 以前工作中mysql连接数
7 数据库 怎么备份的
8 oracle怎么调优的
9 你们mysql数据量有多大?
10 你们备份数据是备份在同一设备?
11 你们是用什么备份的
12 MYSQL会什么?会SQL语句么?
13 会MYSQL调优么?
14 mysql是怎么备份的
15 找出当前目录30天之前的文件,并删除
16 主从复制出错怎么解决
17 mysql的配置文件位置
18 “mysql 四中操作操作是什么

19 “增删改查 你觉得那个最占用资源

20 mysql 简单的 怎么登入 怎么创建数据库bbb 创建 用户 密码 授权
21 mysql数据库同步怎样实现
22 ms2005数据库怎样做优化
23 查询mysql数据库中用户,密码,权限的命令
24 mysql会安装么?主从复制会做么?
25 MySQL语句调优会不会?用的什么工具?
26 MySQL索引你会么?平时怎么用的?你是每个表都加上索引么?你怎么确定你加上索引后速度会快?
27 对数据库这方面有没有什么培训打算。
28 oracle日常管理都做哪些
29 oracle加过索引吗
30 b数索引对更新数据有什么影响
31 你们用软件处理过的数据量有多少,处理过上百万的数据吗
32 哦,你们还有转业的dba,你做过什么
33 你迁移多少数据量
34 mysql 数据库的备份与还原 例如一个数据库test
35 mysql都做了哪些,是你自己搭建的么?
36 oracle你都会什么?
37 了解非关系性数据库么
38 Mysql之前用过什么引擎
39 Mysql怎么解决故障切换
40   Mysql都有那几种日志
41 为什么你们用apache不用nginx
42 SQL server的备份与恢复
43 mysql用的是什么?主从?
44 mysql数据库的备份,用的是脚本?
45 mysql 主从数据库的搭建,配置的命令
46 “nagios 的搭建,监控的内容,遇到过什么问题?怎么解决的?

47 Oracle启动关闭的命令有哪几种,都代表什么含义
48 Oracle逻辑备份工具是什么
49 写出三种数据库对象
50 数据库死锁概念
51 编译与解释的区别
52 oracle内存空间的特点?
53 写出至少5种Oracle文件类型
54 主从复制在停机和不停机情况下,分别怎么加从服务器
55 Sybase数据库相关的东西很多
56 索引的创建(index)
57 表空间的创建、迁移
58 如何利用存储过程提高数据库读取的性能。
59 选择不同的存储引擎,对数据库的工作有何影响
60 跨库时用存储引擎好不好?为何?
61 nosql的利用价值
62 如何合理分配表空间、创建?
63 数据空间的扩容?
64 对表空间如何监控?
65 把数据分开放在不同的表空间,利与弊?
66 如何实现MySQL服务器的冗余。
67 查看是否安装了mysql
68 启动mysql,进入mysql
69 查看oracle是否运行,有多少个数据库
70 怎么样进入oracle
71 查看oracle的用户
72 oracle的登录方式
73 mysql怎么样,主从复制做过吗,怎样查看复制的状态
74 oracle rac与一般DB的区别?
75 数据库有几种数据保护方式(AAA)
76 session是否被锁怎么看,写出查询与处理过程
77 rman还原的几种方式(优劣)
78 rac切换所有主机日志的命令
79 oracle数据查询如何做到一致
80 sql查询语句
81 mysql主从复制怎么做的
82 mysql备份时备份主的还是备份从的?
83 “基于数据库中的成绩表
    成绩(学号,课程名,成绩)
    用SQL语句创建成绩表,并往成绩表中插入一个元组(20010101,管理信息系统,80)”
84
85 mysql安装的时候自己选择路径怎么做?
86 mysql语句你熟么
87 如果一个表被drop,在有完善的归档和备份情况下,如何恢复
88 .对于一个恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略
89 mysql 存储方式?
90 简述MSMQ消息队列的作用及工作原理。
91 说说你用的数据库及区别
92 oracle数据库要多看
93 备份 存储过程
94 有oracle里面的sql语句问题;查找、按条件显示等
95 mysql出过什么故障?
96 oracle接触过么
97 怎样修改mysql表中的信息
98 mysql主从能一个人完成吗,怎么指定主的服务器
99 什么时候恢复数据库?
100 怎么恢复?
101 为什么要备份数据库?
102 备份的周期?
103 系统调优都做哪些?
104 如何删除?
105 mysql远程备份
106 mysql熟悉吗?
107 备份怎么做?
108 你怎么给mysql备份
109 会使用sqlserver么
110 mysql怎么备份
111 mysql同步有几个进程
112 怎么做的mysql数据库备份
113 如果数据库中有一个表的数据量很大,无法用rm删除,该怎么办
114 MYSQL用得怎么样
115 对oracle都做过哪些操作
116 让我进入mysql的目录,他告诉我了路径
117 问我mysqldump是什么意思,mysqld和mysqld_safe什么区别
118 然后问mysql这个命令跟mysqld有什么区别么
119 之后让我打开mysql的配置文件my.cnf问了里面一个参数是什么意思
120 mysql怎么做的备份
121 mysql做的是主从吗
122 主用的是什么引擎
123 主从都用的是innoDB吗
124 innoDB和myisam有什么区别
125 mysql的备份命令是什么
126 在mysql服务器运行缓慢的情况下输入什么命令能缓解服务器压力
127 怎么导出表结构?
128 Oracle的几种模式?
129 oracle的报警日志文件路径?
130 几种关闭数据库方法?参数?区别?
131 会写 Ksh csh 吗?
132 精通oracle吗?
133 会写存储过程吗?
134 oracle的rman怎么用?
135 上一家公司主要是做什么的?你负责哪一块
136 mysql的优化会吗?是怎么做的?
137 搭建过oracle的集群吗?
138 nginx用过吗?做什么用的?测试时最大的负载是多少?
139 正常登入MYSQL后使用什么命令查看其进程是否正常,和变量
140 查看命令的使用方法
141 每小时的0,24,40分钟 执行/home/sh 用crontab
142 怎样重新启动named
143 linux 中查找文件最快的命令是什么
144 linux mysql 重设root密码
145 mysql远程连接命令
146 mysql主从用什么方式传输日志
147 介绍一下mysql
148 mysql、oracle、sqlserver的默认端口是
149 数据库的备份方式
150 mysql用户test 只能由abc.com访问test表且test只能访问test密码testpasswd
151 介绍一下mysql
152 介绍下mysql的管理,备份,主备
153 mysql主从数据不同步如何解决
154 mysql主从做过切换吗?当主的失效,从的自动切换成主?
155 oracle管理过吗?
156 给mysql创建个用户,并对表test有访问权限
157 mysql备份,备份某个库中的某个表
158 查看mysql数据库是否支持innodb
159 如何在mysql某个表中随机抽取10条记录
160 如何查看连接mysql的当前用户
161 书写出mysql常用的命令,以及备份命令
162 写出mysql怎么修改密码?怎么修复损坏的表?
163 mysql用户test 只能由abc.com访问test表且test只能访问test密码testpasswd
164 mysql的备份,数据的导入
165 oracle数据库的安装过程
166 oracle中创建数据库
167 用oracle用户test登录数据库,密码test
168 创建oracle表空间
169 ls,rm,man,vi的含义与作用
170 mysql数据库中多个表结合查询
171 在系统中有个sql文件,怎么在数据库中执行sql文件中的命令
172 mysql的ab复制的原理
173 mysql主从复制数据丢失怎么知道的
174 mysql优化
175 mysql备份流程
176 mysql主从原理
177 书写出mysql常用的命令,以及备份命令
178 写出mysql怎么修改密码?怎么修复损坏的表?
179 Oracle用什么备份
180 都使用过什么数据库?Oracle、mysql?Mysql主从压力大的时候,怎么在不影响业务的前提下,在加入一台mysql
181 mysql数据库用的多吗
182 mysql复制
183 oracle dataguard

抱歉!评论已关闭.