博客
关于我
ORA-00379 缓冲池 DEFAULT 中无法提供 32K 块大小的空闲缓冲区
阅读量:493 次
发布时间:2019-03-06

本文共 2083 字,大约阅读时间需要 6 分钟。

(一)问题

今天在使用Pl/sql developer查看表空间大小的时候,报错误:ORA-00379 缓冲池 DEFAULT 中无法提供 32K 块大小的空闲缓冲区,具体如下图:

SQL> select * from dba_data_files;

 

通过网上查找问题原因,最终发现是因为之前设置了db_32k_cache_size参数,并且建立了32k block size大小的表空间,但是现在用了旧的参数文件,导致无法为相应的块按照32k的block_size来分配buffer cache。

在与我的数据库的实际情况比对,发现数据库db_32k_cache_size值如下:

SQL> show parameter cacheNAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------client_result_cache_lag              big integer 3000client_result_cache_size             big integer 0db_16k_cache_size                    big integer 0db_2k_cache_size                     big integer 0db_32k_cache_size                    big integer 0db_4k_cache_size                     big integer 0db_8k_cache_size                     big integer 0db_cache_advice                      string      ONdb_cache_size                        big integer 0db_flash_cache_file                  string      db_flash_cache_size                  big integer 0db_keep_cache_size                   big integer 0db_recycle_cache_size                big integer 0object_cache_max_size_percent        integer     10object_cache_optimal_size            integer     102400result_cache_max_result              integer     5result_cache_max_size                big integer 1920Kresult_cache_mode                    string      MANUALresult_cache_remote_expiration       integer     0session_cached_cursors               integer     50

 

在看表空间数据块的大小,发现有32K块表空间的存在:

 

 由此基本可以得出结论:ORA-00379错误是由于创建了非标准块表空间,但是在之后因为参数修改或参数文件的替换导致db_Nk_cache_size不满足要求引起。 

 

(二)解决方案

 有2种解决方案,一种是删除非标准块的表空间,另一种是重新设置初始化参数db_Nk_cache_size参数。

(方法一)删除表空间

SQL> drop tablespace tbs_32k including contents and datafiles;

 

在执行查询 

select * from dba_data_files;

 

 不再报错。

 

(方法二)修改初始化参数

SQL> alter system set db_32k_cache_size=16m;System altered

再次执行查询,不再报错。

 

(三)补充

Oracle数据块是数据库中最小的逻辑单元,分为标准块和非标准块两种。其中,标准块的大小在数据库创建时由参数db_block_size参数决定,其后不可更改,通常设置为4K或8K。Oracle 11g最多可以设置4钟不同大小的非标准块,可以为2K、4K、8K、16K、32K。

如果要使用非标准数据块创建表空间,需要在数据库初始化参数文件(spfile)中为每个非标准块在数据库高速缓存区中分配缓存空间,当非标准块高速缓存分配完成后,就可以创建基于非标准块的表空间了。

 

转载地址:http://wnsyz.baihongyu.com/

你可能感兴趣的文章
MySQL Order By实现原理分析和Filesort优化
查看>>
mysql problems
查看>>
mysql replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>
mysql union orderby 无效
查看>>
mysql where中如何判断不为空
查看>>
mysql workbench6.3.5_MySQL Workbench
查看>>
MySQL Workbench安装教程以及菜单汉化
查看>>
MySQL Xtrabackup 安装、备份、恢复
查看>>
mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
查看>>
MySQL _ MySQL常用操作
查看>>
MySQL – 导出数据成csv
查看>>