How To Reload the SYS.DBMS_STATS Package (文档 ID 1310365.1)

2023-11-02

APPLIES TO:

Oracle Server - Enterprise Edition - Version: 9.2.0.1 to 11.2.0.2 - Release: 9.2 to 11.2
Information in this document applies to any platform.

GOAL

How to reload the SYS.DBMS_STATS package into the database ?

SOLUTION

Recreate the SYS.DBMS_STATS package by running the following scripts.

SQL> connect / as sysdba

Drop the SYS.DBMS_STATS package:

SQL> drop package DBMS_STATS;

Recreate the SYS.DBMS_STATS package:

1) Release 9.2, 10.1 and 10.2:

SQL> @?/rdbms/admin/dbmsstat.sql
SQL> @?/rdbms/admin/prvtstas.plb
SQL> @?/rdbms/admin/prvtstat.plb

2) Release 11.1 and 11.2:

SQL> @?/rdbms/admin/dbmsstat.sql
SQL> @?/rdbms/admin/prvtstas.plb
SQL> @?/rdbms/admin/prvtstai.plb
SQL> @?/rdbms/admin/prvtstat.plb


Remark: We recommend running these scripts during maintenance window while database in restricted mode
              to avoid problems that can be caused when other sessions access the same objects.

The following command starts an instance (and mounts and opens the database) in restricted mode:

SQL*Plus SRVCTL (When Oracle Restart Is In Use)
STARTUP RESTRICT srvctl start database -d db_unique_name -o restrict

You can use the restrict mode in combination with the mount, nomount, and open modes.

Later, use the ALTER SYSTEM statement to disable the RESTRICTED SESSION feature:

ALTER SYSTEM DISABLE RESTRICTED SESSION;
测试:
[oracle@rh64 ~]$ sqlplus / as sysdba


SQL*Plus: Release 11.2.0.4.0 Production on Thu Oct 31 06:55:47 2013


Copyright (c) 1982, 2013, Oracle.  All rights reserved.




Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


SQL> select * from v$version;


BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production


SQL> drop package DBMS_STATS;    -----先删除掉包


Package dropped.


SQL> exec dbms_stats.GATHER_TABLE_STATS('SCOTT','EMP');        -------开始报错
BEGIN dbms_stats.GATHER_TABLE_STATS('SCOTT','EMP'); END;


      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'DBMS_STATS.GATHER_TABLE_STATS' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


SQL> select count(*) from dba_objects where object_name='DBMS_STATS';    -----查看此时的对象数字有一个,而且是public的


  COUNT(*)
----------
         1


SQL> SELECT OWNER,OBJECT_NAME from dba_objects where object_name='DBMS_STATS'; 


OWNER
------------------------------
OBJECT_NAME
--------------------------------------------------------------------------------
PUBLIC
DBMS_STATS


SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup restrict;    --------按官档模式以限制方式启动
ORACLE instance started.


Total System Global Area  263049216 bytes
Fixed Size                  2252336 bytes
Variable Size             176161232 bytes
Database Buffers           79691776 bytes
Redo Buffers                4943872 bytes
Database mounted.
Database opened.


SQL> select logins from v$instance;    ----查看得知是以限制模式启动,如果正常的启动这是ALLOW,下文会有
 

LOGINS
----------
RESTRICTED


SQL> select open_mode from v$database;   -----查看模式为读写模式


OPEN_MODE
--------------------
READ WRITE


SQL> exec dbms_stats.GATHER_TABLE_STATS('SCOTT','EMP');
BEGIN dbms_stats.GATHER_TABLE_STATS('SCOTT','EMP'); END;


      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'DBMS_STATS.GATHER_TABLE_STATS' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored




SQL> drop package DBMS_STATS;
drop package DBMS_STATS
*
ERROR at line 1:
ORA-04043: object DBMS_STATS does not exist




SQL> @?/rdbms/admin/dbmsstat.sql


Package created.


No errors.


Synonym created.




Grant succeeded.


create role gather_system_statistics
            *
ERROR at line 1:
ORA-01921: role name 'GATHER_SYSTEM_STATISTICS' conflicts with another user or
role name






Grant succeeded.




Grant succeeded.




Library created.


SQL> @?/rdbms/admin/prvtstas.plb


Package created.


No errors.
SQL> @?/rdbms/admin/prvtstai.plb


Package body created.


No errors.
SQL> @?/rdbms/admin/prvtstat.plb


Package body created.


No errors.
SQL> exec dbms_stats.GATHER_TABLE_STATS('SCOTT','EMP');     -------重建后会发现能正常收集统计信息


PL/SQL procedure successfully completed.
SQL> SELECT OWNER,OBJECT_NAME from dba_objects where object_name='DBMS_STATS';   ----查看此时则有三个对象


OWNER
------------------------------
OBJECT_NAME
--------------------------------------------------------------------------------
SYS
DBMS_STATS


SYS
DBMS_STATS


PUBLIC
DBMS_STATS




SQL> select count(*) from dba_objects where object_name='DBMS_STATS';   


  COUNT(*)
----------
         3
SQL> ALTER SYSTEM DISABLE RESTRICTED SESSION;


System altered.


SQL>  select logins from v$instance;   -------修改正常打开后,LOGINS则是ALLOWED的模式。正常启动时查出来的值是ALLOWED,restricted模式时,此值是RESTRICTED


LOGINS
----------
ALLOWED


SQL> select open_mode from v$database; -------正常的open时包括restricted和nonrestricted状态,查出来的值是READ WRITE,read-only模式时,此值是READ ONLY


OPEN_MODE
--------------------
READ WRITE


SQL> 
-------------------其实可以仔细看下执行的包里面的内容就知道,干了些什么了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

How To Reload the SYS.DBMS_STATS Package (文档 ID 1310365.1) 的相关文章

  • 关于pl/sql异常的问题

    以下文字摘录自oracle文档Oracle Database PL SQL 语言参考 11g 第 1 版 11 1 未处理的异常也会影响 子程序 如果退出子程序 成功后 PL SQL 将值分配给 输出参数 但是 如果您退出 带有未处理的异常
  • Oracle 函数中的加密/解密密码

    由于以前设计不佳的结构 我必须使用的当前数据库将用户密码存储为文本 现在 我正在构建一个必须使用这些密码的前端部分 我当然不想发送未加密的密码 我的想法是编写一个 Oracle 函数来加密和解密文本密码 并在存储过程中使用这些函数来返回加密
  • ORACLE SQL 中的 MAX()

    我有一个表 存储已完成的维护任务的记录列表以及完成的日期和时间 我正在尝试执行子查询来提取具有最新日期的每个任务的记录 我的SQL语句是 SELECT ENGINEERING COMPLIANCE EO AS EO ENGINEERING
  • 从 LEFT OUTER JOIN 中删除重复项

    我的问题非常类似于限制 LEFT JOIN https stackoverflow com questions 757957 restricting a left join 有一个变体 假设我有一个表 SHOP 和另一个表 LOCATION
  • 如何将 SQL 查询结果导出为 csv 样式格式的字符串,然后将其保存到 Oracle 中的 clob 中?

    我有以下问题 我有一个表 Source Data 实际上 有很多不同的源表 我需要将其中的一些数据导出到 Result Table 中 对于每个源表 我都有一些返回数据的 sql 并且需要将其转换为类似 csv 的字符串 例如 Source
  • 当我在 JDBC 应用程序中调用PreparedStatement.cancel() 时,它实际上会在 Oracle 数据库中杀死它吗?

    我有针对 Oracle 10g 数据库运行的 Java JDBC 应用程序 我设置了一个PreparedStatement来执行查询 然后调用ps executeQuery 来运行它 有时查询需要很长时间 我需要终止它 我有另一个线程访问该
  • 检查行中是否有单调递增的值

    我正在寻找一种方法来检查表中的值是否针对特定的行子集单调递增 该表包含列 id name meas date 和 value 对于具有相同名称的所有行 应按 meas date 对行进行排序 并且需要检查这些排序行的值列是否单调递增 因此
  • C# 中强制关闭 oracle 连接

    我有一个报告窗口 显示从可能长时间运行的 Oracle 存储过程返回的结果 我的问题是 当用户关闭窗口时 与 Oracle 的连接保持打开状态 并且可能长时间运行的报告不会被取消 关闭打开的连接的唯一方法是 DBA 手动终止它们或用户退出整
  • oracle查找两个表之间的差异

    我有两个结构相同的表 一个是临时的 另一个是产品的 每次都会加载整个数据集 有时该数据集会从先前的数据集中删除记录 我首先将数据集加载到临时表中 如果删除了任何记录 我也想从产品表中删除它们 那么如何找到prod中存在但temp中不存在的记
  • 我怎样才能等到所有调度程序作业完成?

    我是我的包裹 我正在排队多个作业 如下所示 dbms scheduler create job job name gt p job name job type gt PLSQL BLOCK job action gt p sql code
  • 如何从 Oracle 中获取格式化的 XML

    我对 Oracle 缺乏经验 并且在将数据导出为 XML 时遇到问题 我已经设法让这个查询正常工作 但 XML 的格式似乎是固定的 对我来说不起作用 这是查询 SELECT value em getClobVal AS output FRO
  • 在 PL/SQL 块中定义引用其自身集合的记录类型

    如何在 PL SQL 匿名块中定义包含自身集合属性的记录类型 看下面的例子 DECLARE type t item is record name varchar2 64 children t items referencing t item
  • SQL SELECT 对值求和,不包括重复项

    我在 Oracle SQL 中遇到一个问题 我正在尝试解决这个问题 我将用一个例子来说明 我正在查询三个表 Employees EmployeeID Name 1 John Smith 2 Douglas Hoppalot 3 Harry
  • 如何查看授予其他用户的架构哪些权限

    考虑这种情况 在数据库中 我有两个用户 A 和 B 及其相应的架构 我想知道 如何获取信息 架构 B 中的用户 A 有哪些权限 考虑这种情况 我们有两个用户及其关联的场景 我们有用户A和用户B 在A中 假设我们有TB1 TB2 在B中 假设
  • Oracle DataAccess 相关:“动态程序集中不支持调用的成员。”

    据我了解 此类错误已在 SO 上讨论过多次 有些人认为这是 DLL 文件中的错误 有些人通过更改 DLL 版本来解决 其他人似乎没有任何线索 无论如何 我只是发帖试试运气 在 C GUI 上的网格中选择一行时 我的应用程序崩溃了 stack
  • 在 Oracle 过程中实现多线程

    我正在研究 Oracle 10gR2 这是我的问题 我有一个程序 我们称之为 proc parent 在包内 应该调用另一个过程 让我们调用它 用户创建 我得打电话 用户创建 在一个循环中 它从表中读取一些列 并且这些列值作为参数传递给 用
  • 使用 createNativeQuery 调用 Oracle 存储过程

    我需要使用 JPA 调用存储过程并找到这篇文章 http www oracle com technology pub articles vasiliev jpql html http www oracle com technology pu
  • 无法在 .NET 中加载 Oracle.DataAccess 的文件或程序集

    当我尝试运行一个简单的程序来访问 oracle 时 我收到此消息 无法加载文件或程序集 Oracle DataAccess 版本 2 111 7 20 文化 中性 PublicKeyToken 89b483f429c47342 或其依赖项之
  • 插入现有表时出现异常 ORA-00942: 表或视图不存在

    当尝试将一批行插入现有表时 我遇到了异常 ORA 00942 表或视图不存在 我可以确认该表存在于数据库中 并且我可以使用 oracle 将数据插入到该表中 sql 开发人员 但是当我尝试在java中使用preparedstatement插
  • 在 jdbc 程序中使用时,通过 SQL 客户端插入表中的记录未显示

    我使用 SQL 客户端和 JDBC 程序将几行插入到我的表 EMP 中 使用 SQL 客户端插入的记录不会显示在 Java 的输出控制台中 我正在使用 Java 8 和 oracle 11g 数据库来插入和读取数据库 除了通过 SQL 客户

随机推荐