qq591577286 发表于 2018-9-13 11:32:53

修改Oracle redo logfile和datafile的大小

  破本空间吃紧,没办法,只好想方设法从牙缝里抠了。。。
  先看看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#BYTESMEMBERS ARC STATUSFIRST_CHANGE# FIRST_TIME
  ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
  1112 1048576001 NOINACTIVE1953778 21-4月 -09
  2111 1048576001 NOINACTIVE1858693 15-4月 -09
  3113 1048576001 NOCURRENT1877565 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#BYTESMEMBERS ARC STATUSFIRST_CHANGE# FIRST_TIME
  ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
  1112 1048576001 NOINACTIVE1953778 21-4月 -09
  2111 1048576001 NOCURRENT1858693 15-4月 -09
  3113 1048576001 NOACTIVE1877565 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#BYTESMEMBERS ARC STATUSFIRST_CHANGE# FIRST_TIME
  ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
  1112 1048576001 NOINACTIVE1953778 21-4月 -09
  2111 1048576001 NOCURRENT1858693 15-4月 -09
  3113 1048576001 NOINACTIVE1877565 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#BYTESMEMBERS ARC STATUSFIRST_CHANGE# FIRST_TIME
  ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
  1112 1048576001 NOINACTIVE1953778 21-4月 -09
  2111 1048576001 NOCURRENT1858693 15-4月 -09
  3113524288001 YES UNUSED0
  OK了,日志组3里的日志文件已经减小到50M啦。再把日志组1和2的也缩小到50M,这样就抠出来150M空间了,哈哈哈。。。
  恩,接下来再看看数据文件能不能也瘦身一下:
  SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_free_space
  2group by tablespace_name;
  TABLESPACE_NAMESUM(BYTES)/1024/1024
  --------------------------------------------------
  CAMAR49.125
  CWMLITE10.625
  DRSYS10.3125
  DSS_PDATA_DATA2.4375
  DSS_PMART_DATA335.4375
  DSS_PTEMP_DATA48.5625
  EXAMPLE.5
  INDX24.9375
  ODM10.625
  SYSTEM1.375
  TEST49.6875
  TABLESPACE_NAMESUM(BYTES)/1024/1024
  --------------------------------------------------
  TOOLS3.9375
  UNDOTBS1189.75
  USERS24.9375
  XDB.1875
  已选择15行。
  SQL> col file_name for a45
  SQL> select file_name,tablespace_name,sum(bytes)/1024/1024 filesize
  2from dba_data_files
  3group by file_name,tablespace_name;
  FILE_NAMETABLESPACE_NAMEFILESIZE
  ---------------------------------------------------------------------------------
  D:\ORACLE\ORADATA\ORA92\TEST.ORATEST50
  D:\ORACLE\ORADATA\ORA92\CAMAR.ORACAMAR50
  D:\ORACLE\ORADATA\ORA92\ODM01.DBFODM20
  D:\ORACLE\ORADATA\ORA92\XDB01.DBFXDB38.125
  D:\ORACLE\ORADATA\ORA92\INDX01.DBFINDX25
  D:\ORACLE\ORADATA\ORA92\DRSYS01.DBFDRSYS20
  D:\ORACLE\ORADATA\ORA92\TOOLS01.DBFTOOLS10
  D:\ORACLE\ORADATA\ORA92\USERS01.DBFUSERS25
  D:\ORACLE\ORADATA\ORA92\SYSTEM01.DBFSYSTEM400
  D:\ORACLE\ORADATA\ORA92\CWMLITE01.DBFCWMLITE20
  D:\ORACLE\ORADATA\ORA92\EXAMPLE01.DBFEXAMPLE149.375
  FILE_NAMETABLESPACE_NAMEFILESIZE
  ----------------------------------------------------------------------------------
  D:\ORACLE\ORADATA\ORA92\UNDOTBS01.DBFUNDOTBS1200
  D:\ORACLE\ORADATA\ORA92\DSS_PDATA_DATA.ORADSS_PDATA_DATA50
  D:\ORACLE\ORADATA\ORA92\DSS_PMART_DATA.ORADSS_PMART_DATA500
  D:\ORACLE\ORADATA\ORA92\DSS_PTEMP_DATA.ORADSS_PTEMP_DATA50
  已选择15行。
  看来就DSS_PMART_DATA表空间浪费最严重了,分配了500M空间,但是其中有300多M没有使用:
  SQL>>
  数据库已更改。
  SQL> select tablespace_name,sum(bytes)/1024/1024 filesize from dba_data_files
  2group by tablespace_name;
  TABLESPACE_NAMEFILESIZE
  ------------------------------
  CAMAR50
  CWMLITE20
  DRSYS20
  DSS_PDATA_DATA50
  DSS_PMART_DATA200
  DSS_PTEMP_DATA50
  EXAMPLE149.375
  INDX25
  ODM20
  SYSTEM400
  TEST50
  TABLESPACE_NAMEFILESIZE
  ------------------------------
  TOOLS10
  UNDOTBS1200
  USERS25
  XDB38.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

页: [1]
查看完整版本: 修改Oracle redo logfile和datafile的大小