早上用户反应系统访问很慢很慢,测试访问确实如此,接下来就找原因
应用服务器应该问题不大,问有经验的同事,说问题可能是数据库,然后我就重启了数据库服务,发现没有解决问题,接着就认为应该是数据库表空间文件大小的原因,用语句查询:
SELECT a.tablespace_name "表空间名", total "表空间大小", free "表空间剩余大小", (total - free) "表空间使用大小", total / (1024 * 1024 * 1024) "表空间大小(G)", free / (1024 * 1024 * 1024) "表空间剩余大小(G)", (total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)", round((total - free) / total, 4) * 100 "使用率 %" FROM (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) a, (SELECT tablespace_name, SUM(bytes) total FROM dba_data_files GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name;
执行语句:ALTER DATABASE DATAFILE ‘D:\app\Administrator\oradata\SDQEHR\SDQEHR.DBF‘ RESIZE 30720M;
其中报过一个错误:ORA-01144:文件大小(5242880块)超出4194303块的最大数的异常。这是由于我设置的45G的文件大小太大,后改成30G(30720M)执行成功。
然后又增加了一个新的 表空间文件:
ALTER TABLESPACE BSCHIS ADD DATAFILE ‘D:\app\Administrator\oradata\SDQEHR\SDQEHR1.DBF‘ SIZE 30720M;
完成。
------解决思路----------------------
数据库的db_block_size多大?2k?
------解决思路----------------------
db_block_size Maximum data file size
2kb 8Gb-2kb
4kb 16Gb-4kb
8kb 32Gb-8kb
16kb 64Gb-16kb
32kb 128Gb-32kb
这个限制是由于Oracle的Rowid中使用22位来代表Block号,这22位最多只能代表2^22-1个数据块。