当我们磁盘空间有限,归档日志开启的时候,会产生大量日志信息,磁盘耗尽,导致数据库故障,这时候我们tab路径/文件都不能使用,这时候我们可以清理就近的日志文件
find 命令可以完成这一需求,比如删除3天前的所有以“.log”结尾的文件:
find /文件路径 -name “*.log” -mtime +2 -exec rm {} ;
说明:
- 文件路径是目标文件所在路径;
- -name 设定目标文件名,建议采用,否则可能误删其他文件;
- -ctime 文件最后一次修改时间,后面只能用整数,单位为天,同时,还有atime,mtime,amin,cmin,mmin等时间参数可选,具体请查看帮助;
- 时间说明如下图(随手画的,大概是这个意思),所以删除三天前的文件要用+2
- -exec 表示需要执行的命令,{}代表find找到的内容,";“是固定写法表示结束-exec,
所以例子的”-exec rm {} ;" 就表示对find找到的符合条件的文件执行删除操作
1、清理trc和trm文件
linux按指定时间删除
find /orc/app/oracle/diag/rdbms/orcl/orcl/trace -name "*.trm" -mtime +2 -exec rm {} \;
cd /**/app/oracle/diag/rdbms/orcl/orcl/alert
rm log_*.xml
以上操作虽然可以删除,但是实际查看磁盘空间,依然没有变化,主要原因是采用了物理删除,应该使用逻辑删除,使用rman工具删除,
使用rman删除Archivelog
步骤如下,以下为全部删除,谨慎操作
1、进入RMAN (rman target sys/***@orcl)
2、crosscheck archivelog all;
3、delete expried archivelog all;
2、RMAN工具
先备份,再删除
这是一种最为稳妥的方法了,使用RMAN备份archivelog,备份后全部删除
backup format ‘/u01/arch_%T_%s_%U’ archivelog all delete input;
或者 backup database plus archivelog;
更多参考:Oracle RMAN 清除归档日志
小结
a、归档日志清除的方法最好是在RMAN方式下完成,这样子是最彻底的清除方式
b、对于生产环境应考虑在RMAN备份的时候清除归档日志,如backup archivelog all时使用delete input与delete all input清除归档日志
c、如果备份期间不清除归档日志则arch会很大,造成归档磁盘满而导致归档失败。建议还是删除或考虑存放到闪回区
d、如果清除大部分又想保留最近的,则使用delete noprompt archivelog all completed before 'sysdate - n’方式
e、详细的清除归档日志语法:
更多参考:归档日志语法
查看归档
日志占用空间
SELECT space_limit/1024/1024/1024 AS "Quota_G",space_used/1024/1024 AS "Used_M",space_used/space_limit*100 "Used_%",space_reclaimable AS reclaimable,number_of_files AS files FROM v$recovery_file_dest ;
查看当前归档模式
SQL>archive log list;
开启/关闭archivelog
SQL>shutdown immediate
SQL>startup mount
SQL>alter database archivelog; //(alter database noarchivelog;)
SQL>alter database open;
表空间
1、查询当前用户所有表名及其所属表空间
select table_name 表名 ,tablespace_name 所使用表空间 from user_tables;
2、查看每个表空间的大小
select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name
3、查看剩余表空间大小
SELECT tablespace_name 表空间,sum(blocks*8192/1000000) 剩余空间M FROM dba_free_space GROUP BY tablespace_name;
4、 所有表空间的使用情况:
SELECT F.TABLESPACE_NAME,
(T.TOTAL_SPACE - F.FREE_SPACE) / 1024 "USED (GB)",
F.FREE_SPACE / 1024 "FREE (GB)",
T.TOTAL_SPACE / 1024 "TOTAL(GB)",
(ROUND((F.FREE_SPACE / T.TOTAL_SPACE) * 100)) || '% ' PER_FREE
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BLOCKS *
(SELECT VALUE / 1024
FROM V$PARAMETER
WHERE NAME = 'db_block_size') / 1024)) FREE_SPACE
FROM CDB_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT TABLESPACE_NAME, ROUND(SUM(BYTES / 1048576)) TOTAL_SPACE
FROM CDB_DATA_FILES
GROUP BY TABLESPACE_NAME) T
WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME;
5、 筛选条件查看指定表空间(USERS)的使用情况
SELECT --B.file_name "文件名",
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,
-- file_name,
SUM(BYTES) TOTAL
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME/*,file_name*/) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME AND B. TABLESPACE_NAME LIKE 'USERS' ;
安装注意
用户名密码过期
创建用户时缺省密码过期限制是180天(即6个月), 如果超过180天用户密码未做修改则该用户无法登录。 提示ORA-28001: 口令已经失效
sqlplus / as sysdba
alter user c##xjcx identified by xjcx account unlock;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;