1、配置RMAN自动管理ARCHIVELOG。也可在RMAN中将数据备份到磁带上,然后将过期的ARCHIVELOG删除;
2、可以手工来处理,步骤如下
1)将/oracle下的相关ARCHIVELOG日志文件移到别的文件系统下(保留一段时间的ARCHIVELOG日志即可,其他的可移走,用系统命令mv移走)。然后打包、压缩,备份到介质上,此时可将这些移出的文件删除。注意:别在原来的/oracle打包了,否则空间占满了就有些麻烦了。
2)以oracle用户登录,执行rman target /。如有多个实例此时执行rman target 用户名/密码@实例名,进入rman
3)在rman中执行
RMAN>list archivelog all; /*列出所有的归档日志文件
RMAN>crosscheck archivelog all; /*与物理归档日志文件保持同步,之前移走了一部分文件,因此执行此命令后会在/oracle目录下找不到的归档日志标记为expired
RMAN>list expired archivelog all; /*列出所有expired(过期)的归档日志文件,此时你就可看到移走的归档日志文件均被标记为expired
RMAN>delete expired archivelog all; /*在oracle中删除所有过期的expired文件
RMAN>list archivelog all; /*再列出所有的归档日志文件,就可发现移走的日志文件被删掉了
RMAN>exit /*退出
Archive for the ‘Oracle’ Category
清理 Oracle archivelog
星期二, 八月 23rd, 2011Oracle 崩溃后的简单修复
星期二, 八月 16th, 2011sqlplus /nolog
conn / AS sysdba startup mount recover database until cancel; ALTER database OPEN resetlogs;
补齐被意外砍短的 Oracle .DBF 文件
星期日, 二月 20th, 2011客户一个建在 Linux 上的 Oracle 系统意外崩溃了。
抢救出来的数据文件似乎被砍掉了一截,小于应有的尺寸。
ORA-01122: database file 4 failed verification check ORA-01110: data file 4: 'xxx/users01.dbf' ORA-01200: actual file size of 1569280 is smaller than correct size of 1569281
应急之下通过 Google 找到了一个临时的对付办法。
1。先造一个大小合适填满零的补丁:
$dd if=/dev/zero of=/tmp/patch0 count=1 bs=16k
其中 bs 可以设成init.ora 里设置的 block_size。count 自然是设成 Oracle 抱怨少掉的块数。
2。应用补丁
$cat /tmp/path0 >> $ORACLE_BASE/oradata/$ORACLE_SID/users01.dbf
3。恢复数据文件
SQL>recover datafile 4; Media recovery complete. SQL>alter DATABASE datafile 4 online;
上面的 4 是Oracle 抱怨出错的数据文件的编号,就不用再费劲输入长长的路径了。
接下来就是祈祷重要的数据都还在了。
附,备忘: 起动停止 Oracle 数据库
SQL> conn / AS sysdba Connected. SQL> SQL> SQL> shutdown immediate DATABASE closed. DATABASE dismounted. ORACLE instance shut down. SQL> SQL> SQL> startup mount ORACLE instance started. SQL> startup pfile='/path/to/init.ora' ORACLE instance started.
另外Oracle的密码文件在 $ORACLE_HOME/dbs 里面。
ORA-27101
星期三, 十二月 3rd, 2008客户端报 “ORA-27101: shared memory realm does not exist SVR4 Error: 2: No such file or directory”。
查了半天,竟然是因为服务器上这次起Oracle用的路径和上次不一样。虽然是link到同一目录的,但由于和 lisnter 里配置的不一致,所以导致连不上。重新改过 ORACLE_HOME 之后解决。
顺便记一下启动Oracle的方法:
cd $ORACLE_HOME/bin
./sqlplus ‘/ as sysdba’
SQL>startup
SQL>quit
./lsnrctl start
一些关于 Oracle 的 Link
星期一, 十一月 24th, 2008备份 Oracle
星期一, 十一月 24th, 2008- 表单位
- 备份指定表
exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 file=exp_icdmain_table_yyyymmdd.dmp log=exp_icdmain_table_yyyymmdd.log tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo - 恢复所有的表
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y file=exp_icdmain_table_yyyymmdd.dmp log=imp_icdmain_table_yyyymmdd.log - 恢复其中一部分表
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y file=exp_icdmain_table_yyyymmdd.dmp log=imp_icdmain_table_yyyymmdd.log tables=commoninformation,serviceinfo
- 备份指定表
- 用户单位
- 备份指定用户的所有对象
exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 owner=icdmain file=exp_icdmain_user_yyyymmdd.dmp log=exp_icdmain_user_yyyymmdd.log - 恢复指定用户的所有对象
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y file=exp_icdmain_user_yyyymmdd.dmp log=imp_icdmain_user_yyyymmdd.log - 恢复指定用户的的一部分表
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y file=exp_icdmain_user_yyyymmdd.dmp log=imp_icdmain_user_yyyymmdd.log tables=commoninformation,serviceinfo
- 备份指定用户的所有对象
- 整体备份
- 备份整个数据库
exp system/manager rows=y indexes=n compress=n buffer=65536 feedback=100000 full=y inctype=complete file=exp_fulldb_yyyymmdd.dmp log=exp_fulldb_yyyymmdd.log - 整个数据库的增量备份
exp system/manager rows=y indexes=n compress=n buffer=65536 feedback=100000 full=y inctype=incremental file=exp_fulldb_zl_yyyymmdd.dmp log=exp_fulldb_zl_yyyymmdd.log - 从整体备份恢复所有对象
imp system/manager rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y full=y file=exp_fulldb_yyyymmdd.dmp log=imp_fulldb_yyyymmdd.log - 从增量备份恢复所有对象
imp system/manager rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y full=y inctype=restore file=exp_fulldb_zl_yyyymmdd.dmp log=imp_fulldb_zl_yyyymmdd.log
- 备份整个数据库
缩小 Oracle 表空间
星期一, 十一月 24th, 2008———– maxshrink.sql ———————————-
SET verify off COLUMN file_name format a50 word_wrapped COLUMN smallest format 999,990 heading "Smallest|Size|Poss." COLUMN currsize format 999,990 heading "Current|Size" COLUMN savings format 999,990 heading "Poss.|Savings" break ON report compute SUM OF savings ON report COLUMN VALUE new_val blksize SELECT VALUE FROM v$parameter WHERE name = 'db_block_size' / SELECT file_name, CEIL( (nvl(hwm,1)*&&blksize)/1024/1024 ) smallest, CEIL( blocks*&&blksize/1024/1024) currsize, CEIL( blocks*&&blksize/1024/1024) - CEIL( (nvl(hwm,1)*&&blksize)/1024/1024 ) savings FROM dba_data_files a, ( SELECT file_id, MAX(block_id+blocks-1) hwm FROM dba_extents GROUP BY file_id ) b WHERE a.file_id = b.file_id(+) / COLUMN cmd format a75 word_wrapped SELECT 'alter database datafile '''||file_name||''' resize ' || CEIL( (nvl(hwm,1)*&&blksize)/1024/1024 ) || 'm;' cmd FROM dba_data_files a, ( SELECT file_id, MAX(block_id+blocks-1) hwm FROM dba_extents GROUP BY file_id ) b WHERE a.file_id = b.file_id(+) AND CEIL( blocks*&&blksize/1024/1024) - CEIL( (nvl(hwm,1)*&&blksize)/1024/1024 ) > 0 /
转移 Oracle 的表空间
星期一, 十一月 24th, 20081.将表空间置于只读
只读状态可以使数据仍然可为用户访问.
ALTER tablespace tablespace_name READ ONLY;
2.物理拷贝文件
3.将表空间offline
ALTER tablespace tablespace_name offline;4.rename数据文件
ALTER DATABASE RENAME file 'old_dir_file' TO 'new_dir_file';
5.将表空间联机
ALTER tablespace tablespace_name online;6.将表空间置于read write模式
ALTER tablespace tablespace_name READ WRITE;
转移 Oracle 的TEMP表空间
星期一, 十一月 24th, 2008CREATE tablespace TEMP2 datafile '/data1/ora9data/temp2_01.dbf' SIZE 100k TEMPORARY;
Tablespace created.
ALTER DATABASE DEFAULT TEMPORARY tablespace TEMP2;
Database altered.
DROP tablespace temp including contents AND datafiles;
Tablespace dropped.