Oracle按用户名重建索引方法浅析 (oracle是什么)

教程大全 2025-07-21 06:57:56 浏览

假如你管理的Oracle数据库下某些应用项目有大量的修改删除操作, 数据索引是需要周期性的重建的. 它不仅可以提高查询性能, 还能增加索引表空间空闲空间大小。在Oracle里大量删除记录后, 表和索引里占用的数据块空间并没有释放。

通过重建索引可以释放已删除记录索引占用的数据块空间来转移数据, 重命名的方法可以重新组织表里的数据。

Oracle按用户名重建索引的SQL脚本

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

spool c:\oracle\rebuild_&userName.sql;

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

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

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

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

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

分析索引,观察一下是否碎片特别严重。

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

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

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

oracle是什么

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

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

对于那些特别忙的表要不能用这里上面介绍的方法, 我们需要将它们的索引从rebuild_&username.sql里删去。

【编辑推荐】


oracle10G主机字符串是什么

和其它网络应用一样,要通过网络连接服务器端,你需要指明:服务器地址,网络协议,端口号。 另外由于ORACLE运行一台服务器多个数据库,因此还需指明数据库名称。 如果每次连接都输入以上4项,太过繁琐,为简化操作,可以为常用的连接建立主机字符串,如:jlk =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(Host= 10.10.10.10)(Port = 1521))(CONNECT_DATA = (SID = ORCL))当你连接数据库时可以,直接使用sqlplus user/password@jlk进行连接了,其中jlk即为主机字符串,它表明:以TCP协议,连接地址为10.10.10.10的服务器的1521端口,访问其中名为ORCL的数据库通俗地说,主机字符串是ORACLE中用来表明客户端与服务器端连接的方式。 它只是一个别名,其真正内容包含网络协议,ORACLE实例名等项目。 如果要建立或修改一个主机字符串,可用SQL*NET EASY CONFIG程序。 例如:新安装一个ORACLE,可按以下方式输入: 用户名:SYSTEM 密码:MANAGER 主机字符串:TCP-LOOPBACK

oracle 如何修改用户名

--直接修改底层表 USER$ 更换用户名SQL> UPDATE USER$ SET WHERE USER#=91;已更新 1 行。 SQL> COMMIT;提交完成。 SQL> ALTER SYSTEM CHECKPOINT;系统已更改。 SQL> ALTER USER TT IDENTIFIED BY VALUES 294CE6E7131DD890;ALTER USER TT IDENTIFIED BY VALUES 294CE6E7131DD890*ERROR 位于第 1 行:ORA-: 用户TT不存在 强制Oracle 读取实际数据,而不是读取缓存SQL> ALTER SYSTEM FLUSH SHARED_POOL;系统已更改。 SQL> ALTER USER TT IDENTIFIED BY VALUES 294CE6E7131DD890;用户已更改。 测试连接SQL> CONN TT/TT已连接。 SQL> SELECT * FROM TAB;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------TEST_TT TABLESQL> CONN / AS SYSDBA已连接。 SQL> SHOW USERUSER 为SYSSQL> SHUTDOWN IMMEDIATE数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> STARTUPORACLE 例程已经启动。 ......数据库装载完毕。 数据库已经打开。 可以看出没有再恢复为TESTSQL> SELECT USER#,NAME,PASSWORD FROM USER$ WHERE USER#=91; USER# NAME PASSWORD---------- ------------------------------ ---------------- 91 TT 294CE6E7131DD890SQL> CONN TT/TT已连接。 查看数据对象SQL> SELECT * FROM TAB;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------TEST_TT TABLESQL> SELECT * FROM TEST_TT;A-A 对象权限依然有效SQL> SELECT * FROM 1_TT;A-A 系统权限依然有效SQL> CREATE TABLE KK AS SELECT * FROM 1_TT;表已创建。 SQL> SELECT * FROM TAB;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------KK TABLETEST_TT TABLESQL> CONN / AS SYSDBA已连接。

复杂sql语句

语句(假设你的系统取日期月份的函数MONTH): SELECT MONTH(注册日期),COUNT(*) FROM 表 GROUP BY 1 产生的结果是: 1 23 2 10 3 45 如果你计算每个月度(、、……)的注册人数,应该使用下面的语句(假设你的系统取日期年度的函数是YEAR): SELECT YEAR(注册日期)+ +MONTH(注册日期),COUNT(*) FROM 表 GROUP BY 1 假如你的系统连接字符串不是使用+,那换为相应的字符或者函数,比如INFORMIX是使用YEAR(注册日期)||MONTH(注册日期),比如MYSQL是使用CONCATE函数 补充: SELECT语句的教材专门有聚合函数那一章,你仔细看看吧。 在SELECT语句里面,GROUP子句配合SUM,AVG,MAX,MIN等函数完成分类统计功能,执行我的两个语句,查看输出的结果,你就知道GROUP的含义,下面取一个最简单的例子: “SELECT COUNT(*) FROM 表”这个SQL语句返回的结果只有一个,就是数据库中的总记录条数,如果我们想统计不同用户名的分组进行汇总的记录条数,就应该在SELECT后增加一个字段,同事GROUP BY这个字段,完整的语句是: SELECT 用户名,COUNT(*) FROM 表 GROUP BY 用户名 这个语句也可以这样写: SELECT 用户名,COUNT(*) FROM 表 GROUP BY 1 这时候GROUP BY后面的整数表示按照相应序号的SELECT列分组,这里的1表示第一个的选择结果“用户名”。 如果我们想按用户分组查记录数,但是只现实有重复的记录,那么用GROUP BY的一个HAVING修饰,完整语句如下: SELECT 用户名,COUNT(*) FROM 表 GROUP BY 用户名 HAVING COUNT(*)>1

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐