设为首页 加入收藏

TOP

OracleORA-01555快照过旧说明(二)
2015-11-21 01:56:54 来源: 作者: 【 】 浏览:1
Tags:OracleORA-01555 说明
误的可能性就非常低了。

?

注意:

(1)使用FULL HINT,以避免查询进行索引快速全扫描,而不是对表进行全表扫描。

(2)这里不能为了提高性能而使用PARALLEL(并行),测试表明,在表上进行并行查询,以DIRECT READ方式读取表并不会清除掉表上的事务。

?

如果表过大,SELECT COUNT(*)的时间过长,那么我们可以用下面的代码将表分成多个段,进行分段查询。

/* Formatted on 2011/6/29 19:18:40 (QP5 v5.163.1008.3004) */

SELECT DBMS_ROWID.rowid_create (1,

oid1,

fid1,

bid1,

0)

rowid1,

DBMS_ROWID.rowid_create (1,

oid2,

fid2,

bid2,

9999)

rowid2

FROM (SELECT a.*, ROWNUM rn

FROM ( SELECT chunk_no,

MIN (oid1) oid1,

MAX (oid2) oid2,

MIN (fid1) fid1,

MAX (fid2) fid2,

MIN (bid1) bid1,

MAX (bid2) bid2

FROM (SELECT chunk_no,

FIRST_VALUE (

data_object_id)

OVER (

PARTITION BY chunk_no

ORDER BY

data_object_id, relative_fno, block_id

ROWS BETWEEN UNBOUNDED PRECEDING

AND UNBOUNDED FOLLOWING)

oid1,

LAST_VALUE (

data_object_id)

OVER (

PARTITION BY chunk_no

ORDER BY

data_object_id, relative_fno, block_id

ROWS BETWEEN UNBOUNDED PRECEDING

AND UNBOUNDED FOLLOWING)

oid2,

FIRST_VALUE (

relative_fno)

OVER (

PARTITION BY chunk_no

ORDER BY

data_object_id, relative_fno, block_id

ROWS BETWEEN UNBOUNDED PRECEDING

AND UNBOUNDED FOLLOWING)

fid1,

LAST_VALUE (

relative_fno)

OVER (

PARTITION BY chunk_no

ORDER BY

data_object_id, relative_fno, block_id

ROWS BETWEEN UNBOUNDED PRECEDING

AND UNBOUNDED FOLLOWING)

fid2,

FIRST_VALUE (

block_id)

OVER (

PARTITION BY chunk_no

ORDER BY

data_object_id, relative_fno, block_id

ROWS BETWEEN UNBOUNDED PRECEDING

AND UNBOUNDED FOLLOWING)

bid1,

LAST_VALUE (

block_id + blocks - 1)

OVER (

PARTITION BY chunk_no

ORDER BY

data_object_id, relative_fno, block_id

ROWS BETWEEN UNBOUNDED PRECEDING

AND UNBOUNDED FOLLOWING)

bid2

FROM (SELECT data_object_id,

relative_fno,

block_id,

blocks,

CEIL (sum2 / chunk_size) chunk_no

FROM (SELECT /*+ rule */

b.data_object_id,

a.relative_fno,

a.block_id,

a.blocks,

SUM (

a.blocks)

OVER (

ORDER BY

b.data_object_id,

a.relative_fno,

a.block_id)

sum2,

CEIL (

SUM (a.blocks) OVER ()

/ &trunks)

chunk_size

FROM dba_extents a, dba_objects b

WHERE a.owner = b.owner

AND a.segment_name =

b.object_name

AND NVL (a.partition_name,

'-1') =

NVL (b.subobject_name,

'-1')

AND b.data_object_id

IS NOT NULL

AND a.owner = UPPER ('&owner')

AND a.segment_name =

UPPER ('&table_name'))))

GROUP BY chunk_no

ORDER BY chunk_no) a);

?

该SQL 在执行时需要输入几个参数:

trunks: 表示把表分成的段数

owner: 表的所有者

table_name: 表名

?

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇在Oracle数据库中使用NFS,如何调.. 下一篇Oracle11gDataGuard物理备库快速..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: