|
破本空间吃紧,没办法,只好想方设法从牙缝里抠了。。。
先看看oracle的日志文件大小:
D:\oracle\ora92\bin>sqlplus "/ as sysdba"
SQL*Plus:>
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到:
Oracle9i Enterprise Edition> With the Partitioning, OLAP and Oracle Data Mining options
JServer> SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
1 1 12 104857600 1 NO INACTIVE 1953778 21-4月 -09
2 1 11 104857600 1 NO INACTIVE 1858693 15-4月 -09
3 1 13 104857600 1 NO CURRENT 1877565 17-4月 -09
每个日志文件有100M,决定缩小到50M。先删除一个日志组:
SQL>>
alter database drop logfile group 3
*
ERROR 位于第 1 行:
ORA-01623: 日志3是线程1的当前日志 - 无法删除
ORA-00312: 联机日志 3 线程 1: 'D:\ORACLE\ORADATA\ORA92\REDO03.LOG'
手动切换一下日志,让group 3不再处于CURRENT状态:
SQL>>
系统已更改。
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
1 1 12 104857600 1 NO INACTIVE 1953778 21-4月 -09
2 1 11 104857600 1 NO CURRENT 1858693 15-4月 -09
3 1 13 104857600 1 NO ACTIVE 1877565 17-4月 -09
SQL>>
alter database drop logfile group 3
*
ERROR 位于第 1 行:
ORA-01624: 线程1的紧急恢复需要日志3
ORA-00312: 联机日志 3 线程 1: 'D:\ORACLE\ORADATA\ORA92\REDO03.LOG'
ACTIVE状态还不能删除,因为此时日志组3里的数据在数据库恢复时还需要被使用。于是手动执行一下检查点,让group 3处于INACTIVE状态:
SQL>>
系统已更改。
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
1 1 12 104857600 1 NO INACTIVE 1953778 21-4月 -09
2 1 11 104857600 1 NO CURRENT 1858693 15-4月 -09
3 1 13 104857600 1 NO INACTIVE 1877565 17-4月 –09
现在可以删除了:
SQL>>
数据库已更改。
SQL>>
alter database add logfile group 3 ('D:\ORACLE\ORADATA\ORA92\REDO03.LOG')> *
ERROR 位于第 1 行:
ORA-00301: 添加日志文件 'D:\ORACLE\ORADATA\ORA92\REDO03.LOG' 时出错 -无法创建文件
ORA-27038: skgfrcre: 文件存在
OSD-04010: 指定了 选项, 但文件已经存在
日志文件REDO03.LOG只是在数据库中删除引用了,但是没有在操作系统中真正删除,可以添加 reuse 关键字来让oracle重新建立指定大小的文件:
SQL>>
数据库已更改。
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
1 1 12 104857600 1 NO INACTIVE 1953778 21-4月 -09
2 1 11 104857600 1 NO CURRENT 1858693 15-4月 -09
3 1 13 52428800 1 YES UNUSED 0
OK了,日志组3里的日志文件已经减小到50M啦。再把日志组1和2的也缩小到50M,这样就抠出来150M空间了,哈哈哈。。。
恩,接下来再看看数据文件能不能也瘦身一下:
SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_free_space
2 group by tablespace_name;
TABLESPACE_NAME SUM(BYTES)/1024/1024
------------------------------ --------------------
CAMAR 49.125
CWMLITE 10.625
DRSYS 10.3125
DSS_PDATA_DATA 2.4375
DSS_PMART_DATA 335.4375
DSS_PTEMP_DATA 48.5625
EXAMPLE .5
INDX 24.9375
ODM 10.625
SYSTEM 1.375
TEST 49.6875
TABLESPACE_NAME SUM(BYTES)/1024/1024
------------------------------ --------------------
TOOLS 3.9375
UNDOTBS1 189.75
USERS 24.9375
XDB .1875
已选择15行。
SQL> col file_name for a45
SQL> select file_name,tablespace_name,sum(bytes)/1024/1024 filesize
2 from dba_data_files
3 group by file_name,tablespace_name;
FILE_NAME TABLESPACE_NAME FILESIZE
--------------------------------------------------- -------------------- ----------
D:\ORACLE\ORADATA\ORA92\TEST.ORA TEST 50
D:\ORACLE\ORADATA\ORA92\CAMAR.ORA CAMAR 50
D:\ORACLE\ORADATA\ORA92\ODM01.DBF ODM 20
D:\ORACLE\ORADATA\ORA92\XDB01.DBF XDB 38.125
D:\ORACLE\ORADATA\ORA92\INDX01.DBF INDX 25
D:\ORACLE\ORADATA\ORA92\DRSYS01.DBF DRSYS 20
D:\ORACLE\ORADATA\ORA92\TOOLS01.DBF TOOLS 10
D:\ORACLE\ORADATA\ORA92\USERS01.DBF USERS 25
D:\ORACLE\ORADATA\ORA92\SYSTEM01.DBF SYSTEM 400
D:\ORACLE\ORADATA\ORA92\CWMLITE01.DBF CWMLITE 20
D:\ORACLE\ORADATA\ORA92\EXAMPLE01.DBF EXAMPLE 149.375
FILE_NAME TABLESPACE_NAME FILESIZE
---------------------------------------------------- -------------------- ----------
D:\ORACLE\ORADATA\ORA92\UNDOTBS01.DBF UNDOTBS1 200
D:\ORACLE\ORADATA\ORA92\DSS_PDATA_DATA.ORA DSS_PDATA_DATA 50
D:\ORACLE\ORADATA\ORA92\DSS_PMART_DATA.ORA DSS_PMART_DATA 500
D:\ORACLE\ORADATA\ORA92\DSS_PTEMP_DATA.ORA DSS_PTEMP_DATA 50
已选择15行。
看来就DSS_PMART_DATA表空间浪费最严重了,分配了500M空间,但是其中有300多M没有使用:
SQL>>
数据库已更改。
SQL> select tablespace_name,sum(bytes)/1024/1024 filesize from dba_data_files
2 group by tablespace_name;
TABLESPACE_NAME FILESIZE
-------------------- ----------
CAMAR 50
CWMLITE 20
DRSYS 20
DSS_PDATA_DATA 50
DSS_PMART_DATA 200
DSS_PTEMP_DATA 50
EXAMPLE 149.375
INDX 25
ODM 20
SYSTEM 400
TEST 50
TABLESPACE_NAME FILESIZE
-------------------- ----------
TOOLS 10
UNDOTBS1 200
USERS 25
XDB 38.125
已选择15行。
哈哈,又挤出来了300M空间。
不错不错,看来清理一下还是小有成效滴。。。
最后再记录一下修改会话中oracle日期显示格式的方法:
SQL> select sysdate from dual;
SYSDATE
----------
22-9月 -09
SQL>>
会话已更改。
SQL> select sysdate from dual;
SYSDATE
-------------------
2009-09-22 12:49:34
|
|
|