博客
关于我
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 中的all,5分钟了解MySQL5.7中union all用法的黑科技
查看>>
Mysql 中的日期时间字符串查询
查看>>
MySQL 中锁的面试题总结
查看>>
MySQL 中随机抽样:order by rand limit 的替代方案
查看>>
MySQL 为什么需要两阶段提交?
查看>>
mysql 为某个字段的值加前缀、去掉前缀
查看>>
mysql 主从
查看>>
mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
查看>>
mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
查看>>
mysql 主从关系切换
查看>>
mysql 主键重复则覆盖_数据库主键不能重复
查看>>
Mysql 优化 or
查看>>
mysql 优化器 key_mysql – 选择*和查询优化器
查看>>
MySQL 优化:Explain 执行计划详解
查看>>
Mysql 会导致锁表的语法
查看>>
mysql 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>