3.一个损坏的块就需要放弃一个对象
IT资讯人员最害怕这样的Oracle错误信息,即ORA-1578,“Oracle data block corrupted(Oracle数据块损坏)”。其中一个数据库块的内部结构将不能被修正。信息可以通过文件数量和块数量来识别块的错误。一般而言,补救的方法通过运行以下这样的查询:
SELECT owner, segment_name, segment_type
FROM dba_extents
WHERE file_id = AND
这里,
然而,在Oracle 9i Enterprise Edition中,一个名为BLOCKRECOVER的恢复管理器(RMAN)的命令,可以正确地修正这些块,而不需要放弃和重新建立所涉及的对象。当进入RMAN并连接到目标数据库之后,键入:
BLOCKRECOVER DATAFILE
一个新的查看,名为V$DATABASE_BLOCK_CORRUPTION,可以使得在RMAN备份过程中获得更新,并且当执行一个BLOCKRECOVER时,可以列出块的内容。为了恢复所有被损坏的块,可以使用以下的RMAN:
BACKUP VALIDATE DATABASE;
BLOCKRECOVER CORRUPTION LIST;
如果只需要恢复几个块,这一方法非常有用。对于大规模的损坏块,需要重新存储数据文件的一个先前图像,然而恢复整个数据文件,这样效率更加高。对于任何新的特性,在使用到正式的数据库之前,请认真地测试,这是有必要的。 列不能被重命名或者重新组织
4. 列不能被重命名或者重新组织
重新命名一个表格的列或者改变它的数据类型,通常这意味着建立一个新的表格和复制旧的数据到新表格。列根本不能重新命名,数据类型只有在没有数据(只能为NULL数值)时才能被改变。
Oracle 9i具有两种方法以克服这些限制。现在,ALTER TABLE命令可以直接地重新命名列:
ALTER TABLE books RENAME COLUMN tiitle TO title;
同样,一个名为DBMS_REDEFINITION的PL/SQL工具包可以使一个DBA改变表格的列结构。这是一个复杂的过程,但通常情况下遵循以下的步骤即可实现:
1 使用DBMS_REDEFINITION.CAN_REDEF_TABLE来检查表格满足在线的重新定义,并指定重新定义是否遵循主要的键或者遵循行Ids。
2在相同规划中建立一个空表格,但结构是一样的。省略你想要放弃的列,包含你想要建立的新的列。
3使用DBMS_REDEFINITION.START_REDEF_TABLE来开始重新定义过程。这一过程的参数说明了旧的表格,新的表格,以及如何将现成的列映射到新表格的列。
4建立任一约束,索引。
5使用DBMS_REDEFINITION.FINISH_REDEF_TABLE来完成这一过程。当重新定义在两个表格之间交换时,无论原来表格的大小,都必须将表格锁定为一小段时间。
6. 放弃在重新定义中使用的临时表格,而不再使用它。
当然,重新定义一个表格不会自动地更新任何可以访问表格的程序代码。程序必须分开地更新和调试。然而,DBMS_REDEFINITION does所可以做的就是缩短时间,这正是用户的需求。
只有表格的主人才能分配使用权限
5.只有表格的主人才能分配使用权限
当我提到Oracle安全特性时,客户都无法相信DBA不能将使用权限分配给表格,除非表格的主人已经将其分配给DBA。然而,在以前就是这样的情况。这些限制是Oracle设计的一部分,但它使管理更加困难。在Oracle 9i,一个新的系统权限改变了这一点。
现在的DBA具具备一个名为GRANT ANY OBJECT PRIVILEGE的系统权限。在过去,一个如此的语句
GRANT SELECT ON scott.emp TO giselle;
都会无法通过,除非SCOTT已经将DBA 的SELECT权限分配给他的表格 WITH GRANT OPTION。现在,相同的语句却可以正确运行。
保持忘却状态
正如Visa的创始人Dee Hock所说的,“问题不是你如何去获得创新的思想,而是如何去忘却旧的东西。”所以,请保持忘却状态。