在Oracle数据库中按用户名重建索引的方法

爱恨之潮汐

爱恨之潮汐

2016-02-19 16:46

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐在Oracle数据库中按用户名重建索引的方法,赶紧看过来吧!

  如果你管理的Oracle数据库下某些应用项目有大量的修改删除操作, 数据索引是需要周期性的重建的。

  它不仅可以提高查询性能, 还能增加索引表空间空闲空间大小。

  在ORACLE里大量删除记录后, 表和索引里占用的数据块空间并没有释放。

  重建索引可以释放已删除记录索引占用的数据块空间。

  转移数据, 重命名的方法可以重新组织表里的数据。

  下面是可以按ORACLE用户名生成重建索引的SQL脚本:
  SET ECHO OFF;
  SET FEEDBACK OFF;
  SET VERIFY OFF;
  SET PAGESIZE 0;
  SET TERMOUT ON;
  SET HEADING OFF;
  ACCEPT username CHAR PROMPT 'Enter the index username: ';
  spool /oracle/rebuild_&username.sql;
  SELECT
  'REM +-----------------------------------------------+' || chr(10) ||
  'REM | INDEX NAME : ' || owner || '.' || segment_name
  || lpad('|', 33 - (length(owner) + length(segment_name)) )
  || chr(10) ||
  'REM | BYTES : ' || bytes
  || lpad ('|', 34-(length(bytes)) ) || chr(10) ||
  'REM | EXTENTS : ' || extents
  || lpad ('|', 34-(length(extents)) ) || chr(10) ||
  'REM +-----------------------------------------------+' || chr(10) ||
  'ALTER INDEX ' || owner || '.' || segment_name || chr(10) ||
  'REBUILD ' || chr(10) ||
  'TABLESPACE ' || tablespace_name || chr(10) ||
  'STORAGE ( ' || chr(10) ||
  ' INITIAL ' || initial_extent || chr(10) ||
  ' NEXT ' || next_extent || chr(10) ||
  ' MINEXTENTS ' || min_extents || chr(10) ||
  ' MAXEXTENTS ' || max_extents || chr(10) ||
  ' PCTINCREASE ' || pct_increase || chr(10) ||
  ');' || chr(10) || chr(10)
  FROM dba_segments
  WHERE segment_type = 'INDEX'
  AND owner='&username'
  ORDER BY owner, bytes DESC;
  spool off;

  如果你用的是WINDOWS系统, 想改变输出文件的存放目录, 修改spool后面的路径成:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  spool c:oraclerebuild_&username.sql;

  如果你只想对大于max_bytes的索引重建索引, 可以修改上面的SQL语句:

  在AND owner='&username' 后面加个限制条件 AND bytes &max_bytes

  如果你想修改索引的存储参数, 在重建索引rebuild_&username.sql里改也可以。

  比如把pctincrease不等于零的值改成是零。

  生成的rebuild_&username.sql文件我们需要来分析一下, 它们是否到了需要重建的程度:

  分析索引,看是否碎片严重
  SQLANALYZE INDEX &index_name VALIDATE STRUCTURE;
  col name heading 'Index Name' format a30
  col del_lf_rows heading 'Deleted|Leaf Rows' format 99999999
  col lf_rows_used heading 'Used|Leaf Rows' format 99999999
  col ratio heading '% Deleted|Leaf Rows' format 999.99999
  SELECT name,
  del_lf_rows,
  lf_rows - del_lf_rows lf_rows_used,
  to_char(del_lf_rows / (lf_rows)*100,'999.99999') ratio
  FROM index_stats where name = upper('&index_name');

  当删除的比率大于15 - 20% 时,肯定是需要索引重建的。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  经过删改后的rebuild_&username.sql文件我们可以放到ORACLE的定时作业里:

  比如一个月或者两个月在非繁忙时间运行。

  如果遇到ORA-00054错误, 表示索引在的表上有锁信息, 不能重建索引。

  那就忽略这个错误, 看下次是否成功。

  对那些特别忙的表要区别对待, 不能用这里介绍的方法,

  还要把它们的索引从rebuild_&username.sql里删去。

展开更多 50%)
分享

猜你喜欢

在Oracle数据库中按用户名重建索引的方法

编程语言 网络编程
在Oracle数据库中按用户名重建索引的方法

在ORACLE里按用户名重建索引的方法

编程语言 网络编程
在ORACLE里按用户名重建索引的方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Oracle 数据库中创建合理的数据库索引

编程语言 网络编程
Oracle 数据库中创建合理的数据库索引

Oracle数据库中索引的维护

电脑网络
Oracle数据库中索引的维护

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在Oracle中实现数据库的复制

编程语言 网络编程
在Oracle中实现数据库的复制

在JAVA中连接Oracle数据库(例子)

编程语言 网络编程
在JAVA中连接Oracle数据库(例子)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

格调QQ分组:站在街角思念你 - QQ伤感分组

格调QQ分组:站在街角思念你 - QQ伤感分组

Oracle密码文件使用与维护技巧

Oracle密码文件使用与维护技巧
下拉加载更多内容 ↓