posts - 8, comments - 0, trackbacks - 0, articles - 3

2008年8月21日

用户错误是指用户的误操作,例如误删除表、误截断定表、错误的DML操作等。为了避免用户误操作,必须要培训用户,使他们知道DB可用性和完整性的含义,并且告诉他们什么操作可以做,什么操作不可以做。

1,DROP TABLE误操作

当执行了DROP TABLE操作之后,会删除表结构及其数据。在Oracle 10g之前,如果误删除了表,那么可以使用以下几种解决方法:

  • 使用IMPORT工具导入表结构及其数据,但这种方法可能会丢失部份数据。假定用户在2008年8月21日09:00时导出了EMP表的结构极其数据,在2008年8月21日11:00时误删除了EMP表,此时可以用09:00使用EXP工具导出的数据,但是会丢失09:00时之后的2小时数据。
  • 基于时间点的DB不完全恢复(DBPITR),这种方法可以确保不会丢失EMP表的数据,但可能会丢失其他表空间事务操作的数据。注意,DBPITR只适用于ARCHIVELOG模式。
  • 使用基于时间点的表空间不完全恢复(TSPITR),这种方法不仅可以确保不会丢失EMP表的任何数据,还可以确保不会丢失其他表空间事务操作的数据。注意,TSPITR只适用于ARCHIVELOG模式。

从Oracle Database 10g 开始,通过使用FLASHBACK TABLE 语句不仅可以快速恢复表,而且也不会影响任何其他表空间和其他表。在Oracle database 10g 中,当执行DROP TABLE 操作时,表结构和数据不会立即清除,而是被放在DB 回收站中(Recyclebin) 中。如果表段所在表空间足够大,那么其内容可能永远不会被清除,些时通过FLASHBACK TABLE可以快速恢复表。

Example:

SQL> select count(1) from emp;

  COUNT(1)
----------
        14

SQL> drop table emp;

表已删除。

SQL> select count(1) from emp;
select count(1) from emp
                     *
第 1 行出现错误:
ORA-00942: 表或视图不存在

SQL> flashback table emp to before drop;

闪回完成。

SQL> select count(1) from emp;

  COUNT(1)
----------
        14

 

2, TRUNCATE TABLE 操作

当执行了TRUNCATE TABLE 操作之后,会删除表的所有数据,但是会保留表结构。如果执行了TRUNCATE TABLE 误操作,那么解决方法类似于DROP TABLE。具体方法如下:

  • 使用IMPORT 工具导入表数据,但这种方法可能会丢失部分数据。因为表的结构已经存在,所以在使用IMP 导入表时应该指定IGNOGE=Y(忽略创建错误)选项。
  • 使用基于时间点的DB不完全恢复(DBPITR),这种方法可以确保不会丢失EMP 表的任何数据,但是可以会丢失其它表空间事务操作的数据。
  • 使用基于时间点的TABLESPACE 不完全恢复(TSPITR),这种方法不仅可以确保不会丢失EMP 表的DATA,还可以确保不会丢失其它表空间事务操作的数据。

 

3,DML 误操作

当执行了DML 误操作之后,如果事务没有被提交,那么执行ROLLBACK 语句就可以取消误操作。但如果在DML 误操作之后执行了COMMIT 操作,那么必须解决误操作所带来的影响。在Oracle Database 10g 之前,DBA 可以使用LogMiner 工具分析特定时间段的DML操作,并生成DML 源操作、反操作(INSERT反操作:DELETE,DELETE 反操作:INSERT,UPDATE 反操作:UPDATE)以及相关数据。在确定了错误的DML操作之后,只要执行相应的反操作就可以了。

从Oracle Database 10g 开始,当执行了DML 误操作之后,使用FLASHBACK TABLE 语句可以将表数据恢复到过去的时间点或者过去的SCN(System Change Number)值。注意,如果要使用该特征,那么必须激活表的行移动特征;另外FLASHBACK TABLE 所能恢复到的最早时间受限于初始化参数db_flashback_retention_target。

Example:

SQL> connect scott/tiger@orcl
已连接。
SQL> Alter Table EMP Enable Row Movement;

表已更改。

SQL> select * from emp where empno=7788;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20

SQL> update emp set sal=sal*1.5 where empno=7788;

已更新 1 行。

SQL> commit;

提交完成。

SQL> select * from emp where empno=7788;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7788 SCOTT      ANALYST         7566 19-4月 -87           4500                    20

SQL> flashback table emp to timestamp to_timestamp('2008-08-21 18:20:00', 'YYYY-MM-DD HH24:MI:SS');

闪回完成。

SQL> select * from emp where empno=7788;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7788 SCOTT      ANALYST         7566 19-4月 -87           3000                    20

posted @ 2008-08-21 18:39 毅无涯 阅读(2) | 评论 (0)编辑

       语句失败是指处理SQL语句时出现逻辑失败。当出现语句失败时,Oracle Server会自动回退失败的SQL语句,并且会给用户返回错误代码和错误消息。

        1,应用逻辑错误

       应用逻辑错误主要指SQL语句的编写错误。例如在未连接DB的情况下执SQL语句。该类错误应该由开发人员解决,而不是DBA的责任。

       Example:

       SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 21 11:51:02 2008

        Copyright (c) 1982, 2005, Oracle.  All rights reserved.

        SQL> select * from emp where rownum < 2;
        SP2-0640: 未连接
        SQL>

       解决方法:需要以正确的用户连接到Oracle DB,然后再执行相应的SQL语句。

        SQL> connect scott/tiger@orcl
        已连接。
        SQL> set pagesize 50
        SQL> set linesize 600
        SQL> select * from emp;

            EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
        ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
             7369 SMITH       CLERK            7902 17-12月-80            800                       20

        SQL>

 

        2,输入错误数据

       输入错误数据是指用户试图输入违反约束规则的错误。

       Example:

       SQL> Alter Table EMP Add Constraint CHK_SAL CHECK(SAL>=800 AND SAL<=5000);

       表已更改。

       SQL> UPDATE EMP SET SAL = 100 WHERE EMPNO = 7788;
       UPDATE EMP SET SAL = 100 WHERE EMPNO = 7788
       *
       第 1 行出现错误:
       ORA-02290: 违反检查约束条件 (SCOTT.CHK_SAL)

       解决方法:仔细审核要输入的数据,然后输入正确的数据重新执行SQL。

       SQL> UPDATE EMP SET SAL = 1000 WHERE EMPNO = 7788;

       已更新 1 行。

       SQL>

 

       3,执行未授权操作

       执行未授权操作是指DB用户试图执行未被授权的DB操作。

       Example:

       SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 8月 21 13:05:46 2008

        Copyright (c) 1982, 2005, Oracle.  All rights reserved.

        SQL> connect / as sysdba
        已连接。
        SQL> Create User TEST Identified by TEST;

        用户已创建。

        SQL> Grant connect to TEST;

        授权成功。

        SQL> connect test/test@orcl
        已连接。
        SQL> select * from scott.emp where rownum < 2;
        select * from scott.emp where rownum < 2
                                   *
        第 1 行出现错误:
        ORA-00942: 表或视图不存在

       解决方法:为用户授予必需的权限。

       SQL> connect scott/tiger@orcl
        已连接。
        SQL> Grant SELECT On EMP To TEST;

        授权成功。

        SQL> conn test/test@orcl
        已连接。
        SQL> select empno, ename from scott.emp where rownum < 2;

             EMPNO ENAME
        ---------- ----------
              7369   SMITH

 

       4,超出空间配额

       超出空间配额是指用户在特定表空间上所需实际空间超过了该用户在该表空间上可占用的最大空间。

       Example:

       SQL> conn / as sysdba
       已连接。
       SQL> Alter User TEST Quota 3K On Users;

       用户已更改。

       SQL> Grant Create Any Table to TEST;

       授权成功。

       SQL> conn test/test@orcl;
       已连接。
       SQL> Create Table TableA
         2  (
         3    ColA varchar2(50),
         4    ColB varchar2(100)
         5  )
         6   TableSpace Users;
       Create Table TableA
       *
       第 1 行出现错误:
       ORA-01536: 超出表空间 'USERS' 的空间限额

       解决方法:使用DBA身份登录到DB,使用Alter User语名为用户分配更多的空间配额,然后重新执行。

       SQL> conn / as sysdba
       已连接。
       SQL> Alter User TEST Quota 50M On Users;

       用户已更改。

       SQL> conn test/test@orcl
       已连接。
       SQL>  Create Table TableA
         2   (
         3     ColA varchar2(50),
         4     ColB varchar2(100)
         5   )
         6    TableSpace Users;

       表已创建。

       SQL>

 

       5,表空间无足够空间

       表空间无足够空间是指当SQL操作需要从表空间分配空间时,表空间没有足够剩余空间所导致的错误。

      Example:

       SQL> connect new/new@orcl
       已连接。
       SQL> Grant Select On Stock To Test;

       授权成功。

       SQL> connect test/test@orcl
       已连接。

       SQL> insert /*+append*/into tablea value(select colA,colB from new.temp);
       insert /*+append*/into tablea value(select colA,colB from new.temp)
       *
       第 1 行出现错误:
       ORA-01653: 表 TEST.TABLEA 无法通过 128 (在表空间 USERS 中) 扩展

       解决方法:扩展表空间

       SQL> conn / as sysdba
       已连接。
       SQL> ALTER TABLESPACE "USERS" ADD DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS02.DBF' SIZE
       500M;

       表空间已更改。

       SQL> insert /*+append*/into tablea value(select colA,colB from new.temp);

       已创建8045614行。

       SQL>

posted @ 2008-08-21 14:48 毅无涯 阅读(3) | 评论 (0)编辑

Oracle失败包括语句失败、用户错误、进程失败、网络失败、例程失败和介质失败六种类型。

posted @ 2008-08-21 11:19 毅无涯 阅读(5) | 评论 (0)编辑

为了成为一名DBA,不得不认真学习一下Oracle,不过我不能只为了考证去学习,我觉得更应该注重技术的提高,所以我选择从《精通Oracle 10g 备份与恢复》开始学起。今天就是个开始。

posted @ 2008-08-21 11:04 毅无涯 阅读(6) | 评论 (0)编辑

     听着收集的轻音乐,写着日志,感觉很轻松,很舒服,是一种享受。

     最近好像没有做什么事,但总觉得天天有事,天天忙碌不停,抽不出时间去做自己想做的事情。或许这正符合深圳这座城市的特征——深圳是一座让你无法停止奋斗的城市。在来深圳之前时,我经常猜测深圳到底是什么样的,是不是和我想象中的一样,是不是真的像别人说的那样神奇......我最终选择了辞掉武汉一份非常不错的工作,带着我的梦想踏上驶往深圳的列车。

     刚来深圳时感觉深圳很美好,可时间一长就不是那个味道了,每次过天桥上班时感觉有点枯燥,因为每天都是这样,公司—宿舍,两点一线的生活真的有点乏味,楼还是那座楼,桥还是那座桥,办公桌还是那张办公桌......

     不管怎样,我不后悔来深圳,深圳给我了不少机会,有时可能是我没有抓住,总体来说还比较满意。薪水方面,去年下半年就达到我最初的期望值;友情方面,有大哥、勇哥一直照顾着,还结识了不少朋友,在此我感谢所有给予我帮助的朋友,特别感谢大哥、勇哥,没有他们的帮助,可能我的路也不会这么顺,谢谢你们!

     我来深圳应该算是我人生的一步路,这一步我获得了收获,但是最近半年多我好像没有什么进展,一直停止停滞不前,可能真的是有压力才会有动力,不管是什么原因,总体来说是我堕落了。

     我不应该甘于现状,我需要再向前迈一步,我决定好好学习一下Oracle,成为一名Oracle DBA,我计划6个月内考得OCA证书,8个月内考得OCP证书,在未考得OCP证书之前不抽烟不喝酒,以示我的决心与意志。成为一名DBA也是我很久以来的一个愿望,我希望8个月内能实现这个愿望,一定能。

posted @ 2008-08-21 09:55 毅无涯 阅读(7) | 评论 (0)编辑

2008年8月19日

1,菜单栏 ===> 工具 ===> 帐户

image

 

2,点击右边的添加按钮

 

3,选择"其他日志服务",然后点"下一步"

image

 

4, 输入"日志主页","用户名","密码",然后点"下一步"

image

 

5,选择所"使用的日志类型",并且输入"日志的远程发布URL",然后点"下一步"

image

注:CSDN和CNBLOGS所使用的日志类型是:Metaweblog API。

CSDN的日志远程发布URL格式是:http://blog.csdn.net/<username>/services/metablogapi.aspx

CNBLOGS日志远程发布URL格式是:http://www.cnblogs.com/<username>/services/metaweblog.aspx

 

6,正在检测日志设置时提示"是否允许Writer 创建临时日志",选择"是"

image

 

7,完成

image

posted @ 2008-08-19 11:25 毅无涯 阅读(16) | 评论 (0)编辑

2008年4月15日

^([0-9a-fA-F]{2})(([/\s:-][0-9a-fA-F]{2}){5})$ 

Mac地址以空格,"-",":"分开

^([0-9a-fA-F]{2})(([0-9a-fA-F]{2}){5})$ 

中间没有任何符号

posted @ 2008-04-15 11:26 毅无涯 阅读(19) | 评论 (0)编辑