行链接和行迁移的检测和防止
2008-04-19 21:46
239 查看
用以下方法检测行链接
1. 检测数据库级的行链接的影响(快速估计方法)
查询V$SYSSTAT试图的统计信息‘table fetch continued row’
Select value from v$sysstat where name = ‘table fetch continued row’;
上面的查询返回由该查询访问到的链接行的数量;该方法对数据库中行链接的严重性进行快速估计
2. 获得表的链接行的计数(到表级)
使用SQL的命令ANALYZE TABLE来分析表
Analyze table mrp.mrp_system_items computes statistics
分析此表将更新DBA_TABLES视图的CHAINED_CNT列, 该列有该表的链接行计数。查询DBA_TABLES将得到链接行的计数
Select chain_cnt from dba_tables where table_name = ‘MRP_SYSTEM_ITEMS’
And owner = ‘MRP’
3.确定表的行(到行级)
1> 创建CHAINED_ROW表,ORACLE提供UTLCHAIN.SQL的脚本,在ORACLE_HOME/RDBMS/ADMIN目录中。
2> 通过分析表来检查链接/迁移行
ANALYZE TABLE EMP LIST CHAINED ROWS INTO CHAINED_ROWS
对所有需要检查的表重复执行该步骤
3> 查询CHAINED_ROWS 表
SELECT OWNER_NAME, TABLE_NAME, HEAD_ROWID FROM CHAINED_ROWS
4. 怎样删除行链接
行链接很难消除。完全消除行连接,有必要用较大的数据块尺寸来重建数据库。
1. 执行一致性的全数据库导出
2. 删除旧的数据库
3. 用较大的数据块尺寸创建一个新数据库
4. 将数据从导出转储文件中导入到新建的数据库中
5.怎样删除行迁移
方法1 此方法在一个大表中有很少的行链接时使用。
1) 通过分析表并将行列入chained_rows
ANALYZE TABLE EMP LIST CHAINED ROWS INTO CHAINED_ROWS
2) 使用CREATE TABEL 。。。。。AS SELECT命令来创建一个临时表并拷贝迁移的行
Create table chain_tmp as
Select *
From emp
Where rowed in (select head_rowid from chained_rows);
查询临时表以确保已经备份了迁移行
3) 从原来的表中删除迁移的行
Delete from emp
Where rowed in (select head_rowid from chained_rows)
4) 将临时表的行拷贝到原来的表中
Insert into emp
Select * from chain_tmp;
应检查,确保行已经重新插入到表中,然后,删除chained_rows
5) 检查链接行,通过截取使chained-rows为空,再次分析此表来查找连接行
Analyze table emp
List chained rows into chained_rows
检查是否还有行被插入到chained_rows中
SELECT owner_name, table_name, head_rowid FROM chained_rows;
如果返回了行, 则说明这些行是连接行而不是迁移行
方法2 此方法在一个大表中有许多连接行时使用。
1) 导出该表的行,或者使用CREATE TABLE 。。。AS SELECT 语句将表的行拷贝到临时表中
2) 使用带DROP STROAGE选项的TRUNCATE命令来截取该表。如果想要增加PCTFREE,则使用带STORAGE的子句的ALTER TABLE 命令
3) 将表行导入到该表中
1. 检测数据库级的行链接的影响(快速估计方法)
查询V$SYSSTAT试图的统计信息‘table fetch continued row’
Select value from v$sysstat where name = ‘table fetch continued row’;
上面的查询返回由该查询访问到的链接行的数量;该方法对数据库中行链接的严重性进行快速估计
2. 获得表的链接行的计数(到表级)
使用SQL的命令ANALYZE TABLE来分析表
Analyze table mrp.mrp_system_items computes statistics
分析此表将更新DBA_TABLES视图的CHAINED_CNT列, 该列有该表的链接行计数。查询DBA_TABLES将得到链接行的计数
Select chain_cnt from dba_tables where table_name = ‘MRP_SYSTEM_ITEMS’
And owner = ‘MRP’
3.确定表的行(到行级)
1> 创建CHAINED_ROW表,ORACLE提供UTLCHAIN.SQL的脚本,在ORACLE_HOME/RDBMS/ADMIN目录中。
2> 通过分析表来检查链接/迁移行
ANALYZE TABLE EMP LIST CHAINED ROWS INTO CHAINED_ROWS
对所有需要检查的表重复执行该步骤
3> 查询CHAINED_ROWS 表
SELECT OWNER_NAME, TABLE_NAME, HEAD_ROWID FROM CHAINED_ROWS
4. 怎样删除行链接
行链接很难消除。完全消除行连接,有必要用较大的数据块尺寸来重建数据库。
1. 执行一致性的全数据库导出
2. 删除旧的数据库
3. 用较大的数据块尺寸创建一个新数据库
4. 将数据从导出转储文件中导入到新建的数据库中
5.怎样删除行迁移
方法1 此方法在一个大表中有很少的行链接时使用。
1) 通过分析表并将行列入chained_rows
ANALYZE TABLE EMP LIST CHAINED ROWS INTO CHAINED_ROWS
2) 使用CREATE TABEL 。。。。。AS SELECT命令来创建一个临时表并拷贝迁移的行
Create table chain_tmp as
Select *
From emp
Where rowed in (select head_rowid from chained_rows);
查询临时表以确保已经备份了迁移行
3) 从原来的表中删除迁移的行
Delete from emp
Where rowed in (select head_rowid from chained_rows)
4) 将临时表的行拷贝到原来的表中
Insert into emp
Select * from chain_tmp;
应检查,确保行已经重新插入到表中,然后,删除chained_rows
5) 检查链接行,通过截取使chained-rows为空,再次分析此表来查找连接行
Analyze table emp
List chained rows into chained_rows
检查是否还有行被插入到chained_rows中
SELECT owner_name, table_name, head_rowid FROM chained_rows;
如果返回了行, 则说明这些行是连接行而不是迁移行
方法2 此方法在一个大表中有许多连接行时使用。
1) 导出该表的行,或者使用CREATE TABLE 。。。AS SELECT 语句将表的行拷贝到临时表中
2) 使用带DROP STROAGE选项的TRUNCATE命令来截取该表。如果想要增加PCTFREE,则使用带STORAGE的子句的ALTER TABLE 命令
3) 将表行导入到该表中
相关文章推荐
- 行链接和行迁移检测和消除方法
- Oracle 行迁移 & 行链接的检测与消除
- Oracle中行迁移和行链接的清除及检测
- Oracle中行迁移和行链接的清除及检测
- 行链接和行迁移检测和消除方法
- 防止浏览器拦截的新窗口打开链接方案
- 网络链接及服务检测助手 v1.0 beta 怎么用
- jquery preventDefault() 方法防止打开不是本站的链接URL
- 行链接与行迁移
- 关于Oracle数据库中行迁移/行链接的问题
- CHtmlView 和 Webbrowser 控件中超链接点击事件的获取与检测
- SpringMvc文件资源防止被外链链接
- 在ASP.NET MVC5 及 Visual Studio 2013 中为Identity账户系统配置数据库链接及Code-First数据库迁移
- SpringMvc文件资源防止被外链链接
- ORACLE性能诊断实例-行迁移和行链接 .
- 网站无效链接检测工具
- 防止非法链接(referer)
- 每天定时检测404链接
- JS事件防止链接打开 URL:
- 防止虚拟机被应用程序检测