当前位置:首页 » 硬盘大全 » 清除oracle第一次查询缓存
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

清除oracle第一次查询缓存

发布时间: 2023-08-17 14:55:41

A. 如何清除某条sql在库缓存中的执行计划

DBA 日常管理过程中会遇到需要把特定的sql语句的执行计划从shared pool 中清除或者需要重新生产新的执行计划的要求。通常的alter system flush shared_pool;或者重新执行信息统计又会造成较大的影响,所以可以使用oracle提供的
dbms_shared_pool.purge 来清除某个特定的sql的执行计划。
下面是关于dbms_shared_pool.purge 的官方介绍:
The syntax for the DBMS_SHARED_POOL.PURGE package is:
procere purge (name varchar2, flag char DEFAULT 'P', heaps number DEFAULT 1);
name: 指定要处理的对象的名称,有两种情况:
1 PL/SQL 对象 就是对象的名称
2 SQL对象,指定 'address','hash_value' 的 SQL 游标。
标记位 flag是可选的。如果忽略了该参数,则该包默认是包,过程,函数的名称并且忽视名称。否则,该参数就指定一个对象类型。标记位是大小写敏感的。
标记位代表的对象类型:
Value Kind of Object to keep
----- ----------------------
P package/procere/function
Q sequence
R trigger
T type
JS java source
JC java class
JR java resource
JD java shared data
C cursor --游标
heaps: heaps to purge. e.g if heap 0 and heap 6 are to be purged.
1<<0 | 1<<6 => hex 0x41 => decimal 65. so specify heaps=>65.
Default is 1 i.e heap 0 which means the whole object will be purged.
实验环境 版本:11.2.0.1.0 dbms_shared_pool.purge 只能通过dba才能使用
oracle@rac1:rac1 /home/oracle>sqlplus yang/yang
SQL*Plus: Release 11.2.0.1.0 Proction on Fri Jul 8 15:32:43 2011
yang@rac1>create table yangtab (id int) ;
Table created.
yang@rac1>select * from yangtab;
no rows selected
yang@rac1>select address,hash_value,executions,parse_calls
2 from v$sql where sql_text like 'select * from yangtab%';
ADDRESS HASH_VALUE EXECUTIONS PARSE_CALLS
---------------- ---------- ---------- -----------
00000001736EFBB8 3337951036 1 1
yang@rac1>exec dbms_shared_pool.purge('00000001736EFBB8,3337951036','C');
BEGIN dbms_shared_pool.purge('00000001736EFBB8,3337951036','C'); END;
*
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'DBMS_SHARED_POOL.PURGE' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

yang@rac1>conn /as sysdba
Connected.
sys@rac1>create table yangt (id int);
Table created.
sys@rac1>select * from yangt;
no rows selected
sys@rac1>select address,hash_value,executions,parse_calls
2 from v$sql where sql_text like 'select * from yangt%';
ADDRESS HASH_VALUE EXECUTIONS PARSE_CALLS
---------------- ---------- ---------- -----------
00000001736EFBB8 3337951036 1 1 -- 使用普通用户时生成的。
0000000170D9BA50 2693392179 1 1
使用dbms_shared_pool.purge 删除第一个sql的游标。
sys@rac1> exec dbms_shared_pool.purge('00000001736EFBB8,3337951036','C');
PL/SQL procere successfully completed.
sys@rac1>select address,hash_value,executions,parse_calls
2 from v$sql where sql_text like 'select * from yangt%';

ADDRESS HASH_VALUE EXECUTIONS PARSE_CALLS
---------------- ---------- ---------- -----------
0000000170D9BA50 2693392179 1 1
sys@rac1>exec dbms_shared_pool.purge('0000000170D9BA50,2693392179','C');
PL/SQL procere successfully completed.
sys@rac1>select address,hash_value,executions,parse_calls
2 from v$sql where sql_text like 'select * from yangt%'
no rows selected

B. 如何正确删除Oracle归档日志

1,首先删除归档日志物理文件,归档日志一般都是位于archive目录下,AIX系统下文件格式为“1_17884_667758186.dbf”,建议操作前先对数据库进行备份,删除时至少保留最近几天的日志用于数据库恢复。
2,把归档日志的物理文件删除后,我们就可以正常登入ORACLE了,但是还没完全把归档日志删除干净,ORACLE的controlfile中仍然记录着这些archivelog的信息,在oracle的OEM管理器中有可视化的日志展现出,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,接下去我们要做的就是这个工作。
利用RMAN进行删除操作,操作步骤如下:(window客户端系统为例):
1.指定数据库实例
C:/Documents
and
Settings/Administrator>SET
ORACLE_SID
=orcl
2.连接数据库
C:/Documents
and
Settings/Administrator>RMAN
TARGET
SYS/sysadmin@orcl
3.查看归档日志的状态
RMAN>
list
archivelog
all;
4.手工删除归档日志文件
RMAN>
DELETE
ARCHIVELOG
ALL
COMPLETED
BEFORE
'SYSDATE-7';
5.退出rman.

C. oracle的缓存怎么清除

altersystemflashbuffer_cache;

D. 怎么清理oracle存储过程中的缓存

ALTER SYSTEM FLUSH SHARED_POOL

这个语句清除SGA中的 shared pool,shared pool存储下面的信息:
1、数据字典
2、Shared SQL & PL/SQL,存储过程、函数、包以及触发器
但是有一点要清楚的是假如这些对象正在使用时是无法清除的。

E. oracle清除表数据

删除表t1中的全部数据,在命令行中输入:
delete fron t1;
上述命令当数据量比较大的时候,执行速度慢,好处是管理员可以恢复删除的数据。
truncate table t1;
上述命令执行速度块,尤其是特别大的表(几千万行)也可以快速删除所有数据,坏处是被删除的数据非常难以恢复。类似删除文件,而且清空了垃圾箱。