红联Linux门户
Linux帮助

Oracle备份与恢复【持续更新】

发布时间:2010-10-25 09:44:55来源:红联作者:里宁科斯
[font=黑体] 大家一起来学习吧[/font]


执行未授权操作
执行未授权操作时指数据库用户试图执行未被授权的数据库操作。假定SMITH用户不具备SELECT ANY TABLE系统权限,并且在SCOTT.EMP表上不具备任何对象权限,那么当该用户访问SCOTT.EMP表时将会显示错误信息。
SQL>conn smith/lion@demo
已连接。
SQL>SELECT ename,sal FROM scott.emp WHERE deptno=10;
SELECT ename,sal FROM scott.emp WHERE deptno=10
*
第1行出现错误:
ORA-00942:表或试图不存在
如上所示,因为SMITH用户在SCOTT.EMP表上不具备任何对象权限,所以当查询该表时会显示错误信息。为了解决这种错误,应该为用户授予必须的权限。
SQL>conn scott/tiger@demo
已连接。
SQL>GRANT SELECT ON emp TO smith;
授权成功。
解决语句:SQL>GRANT SELECT ON 表名 TO 用户名;

超出空间配额
超出空间配额是指用户在特定表空间上所需实际空间超过了该用户在该表空间上可占用的最大空间。假定SMITH用户在USER01表空间上具有1M的空间配额,并且其对象已经在USER01表空间上占用了900K的空间,如果该用户要建立的新表所需空间超过200K,那么建表将会出现失败。错误示例如下:
SQL>CREATE TABLE temp(cola INT,colb INT) STORAGE(MINEXTENTS 4);
CREATE TABLE temp(cola INT,colb INT) STORAGE(MINEXTENTS 4);
*
第1行出现错误:
ORA-01536:超出表空间‘USER01’的空间限额
解决:
以DBA身份登录到数据库,使用ALTER USER语句为用户分配更多的空间配额,然后重新执行相应语句。
SQL>conn system/manager@demo
已连接。
SQL>ALTER USER smith QUOTA 100M ON user01;
用户已更改。
解决语句:SQL>ALTER USER 用户 QUOTA 100M(赋予空间的大小)ON 表空间;


表空间无足够空间
表空间无足够空间是指当SQL操作需要从表空间分配空间是,表空间没有足够剩余空间所导致的错误。当用户执行CREATE TABLE语句,INSERT语句活UPDATE语句,使用SQL*Loader装载数据数,可能会导致在表空间中分配区。如果表空间没有足够的剩余空间,那么分配区将会失败。
SQL>INSERT /*+append*/ INTO sales VALUE(SELECT * FROM temp);
INSERT /*+append*/ INTO sales VALUE(SELECT * FROM temp)
*
第1行出现错误:
ORA-01653:表SMITH.SALES无法通过(在表空间USER01中)扩展
当用户试图将TEMP表数据装载到SALES表时,因为表空间USER01没有足够的剩余空间,从而导致了以上错误。从技术角度讲,DBA应该确保表空间具有足够空间,以避免出现该类错误。但如果出现了这种错误,DBA应该扩展表空间。
SQL>conn system/manager@demo
SQL>ALTER TABLESPACE user01 ADD DATAFILE ‘D:\demo\user01_2.dbf’
2 SIZE 10M AUTOEXTEND ON NEXT 10M;
解决语句:SQL>ALTER TABLESPACE user01 ADD DATAFILE 'd:\demo\user01_2.dbf'
2 SIZE 10M AUTOEXTEND ON NEXT 10M;

FLASHBACK TABLE语句
当执行DROP TABLE操作时,表结构和数据不会立即被清除,而是被放在数据库回收站(Recyclebin)中。如果表段所在表空间足够大,那么其内容可能永远不会被清除,此时通过FLASHBACK TABLE可以迅速恢复表。
SQL>FLASHBACK TABLE 表名 TO BEFROE DROP;

当执行了DML误操作之后,使用FLASHBACK TABLE语句可以将表数据恢复到过去的时间点或者过去的SCN值。注意,如果使用该特征,那么必须激活表的行移动特征;另外FLASHBACK TABLE 所能恢复到的最早时间受限于初始化参数db_flashback_retention_target。使用FLASHBACK恢复DML误操作的示例如下:
SQL>conn scott/tiger@demo
SQL>ALTER TABLE emp ENABLE ROW MOVEMENT;
SQL>UPDATE emp SET sal=sal*1.1 where deptno=10;
SQL>COMMIT;
SQL>SELECT ename,sal FROM emp WHERE deptno=10;

ENAME SAL
-------------------------------------------------
CLARK 2964.5
KING 6050
MILLER 1573
SQL>FLASHBACK TABLE emp TO TIMESTAMP TO_TIMESTAMP
2 (‘2004-09-22 16:13:27’, ‘yyyy-mm-dd hh24:mi:ss’);
SQL>SELECT ename,sal FROM emp WHERE deptno=10;

ENAME SAL
-------------------------------------------------
CLARK 2695
KING 5500
MILLER 1430
文章评论

共有 5 条评论

  1. dongyichen 于 2011-08-04 11:46:36发表:

    还没学到那里,先见识下~

  2. guodingdong 于 2011-03-11 17:32:32发表:

    学习学习!!!

  3. wuyunhong111 于 2011-01-26 09:14:38发表:

    确实不错,我以前就是学oracle的,现在开始学linux

  4. xlniva 于 2010-10-25 10:28:42发表:

    没学过OR的路过

  5. 里宁科斯 于 2010-10-25 09:45:47发表:

    如果大家觉得好,就支持我,我会持续更新