Oracle 日常運(yùn)維操作

備份

每臺 Oracle 機(jī)器都已配置了每天凌晨 03:03 開始自動做備份懂傀。

[oracle@oracle-test-001:/home/oracle]
$ crontab -l
3 3 * * * sh /data/backup/backup.sh

開發(fā)童鞋若需臨時備份,在 需要備份的機(jī)器上直接跑一次備份腳本即可爆哑。

備份示例:

su - oracle
sh /data/backup/backup.sh

腳本正常執(zhí)行完畢后什猖,可以到存放備份的目錄下在檢查一下備份文件。

備份腳本 backup.sh 示例:

$ cat /data/backup/backup.sh
#!/bin/bash
DATE=`date +%d`
echo $DATE
export ORACLE_APP=/data/app/oracle
export ORACLE_BASE=$ORACLE_APP
export ORACLE_HOME=/data/app/oracle/product/11.2.0/db_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/usr/lib:/usr/local/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

del_date=`date -d "7 days ago" +%d`
echo $del_date
rm -f /data/backup/*$del_date.dmp

exp USER_ONE/USER_ONE  file=/data/backup/USER_ONE-$DATE.dmp owner=USER_ONE
exp USER_TWO/USER_TWO  file=/data/backup/USER_TWO-$DATE.dmp owner=USER_TWO

啟動和關(guān)閉

啟動:

su - oracle
sqlplus / as sysdba
startup

用參數(shù)文件啟動 Oracle素邪,比如:

SQL> startup pfile='/data/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora'

關(guān)閉:

su - oracle
sqlplus / as sysdba
shutdown immediate;

啟動和關(guān)閉監(jiān)聽(oracle用戶下執(zhí)行):

lsnrctl start
lsnrctl stop
lsnrctl status

刪除用戶和表空間

drop   user  wac_tmp CASCADE;
drop tablespace wac_tmp including contents cascade constraints;

創(chuàng)建用戶和表空間

創(chuàng)建表空間:

create tablespace  wac_tmp 
datafile '/data/oradata/orcl/wac_tmp.dbf' 
size 100M
reuse
 autoextend on
    next 100M
    maxsize unlimited;

創(chuàng)建用戶:

create user wac_tmp identified by "1" default tablespace wac_tmp;

刪除用戶和表空間

對于單個 user 和tablespace 來說外莲, 可以使用如下命令來完成。

1兔朦、刪除 user :

drop user ×× cascade

說明: 刪除了 user偷线,只是刪除了該 user 下的 schema objects ,是不會刪除相應(yīng)的 tablespace 的沽甥。

2声邦、 刪除 tablespace

DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;

用戶授權(quán)

-- Grant/Revoke role privileges 
grant connect,resource to 用戶名;

-- Grant/Revoke system privileges 
grant create any sequence to 用戶名;
grant select any table to 用戶名;
grant update any table to 用戶名;
grant unlimited tablespace to 用戶名;
grant select on dba_tables to 用戶名;
grant read, write on directory data_pump_dir to 用戶名;

用戶解鎖

查看當(dāng)前被鎖賬戶及鎖定時間:

select username,account_status,lock_date from dba_users;

若有業(yè)務(wù)用戶被鎖定,可以這樣解鎖:

alter user username account unlock;

用戶已經(jīng)被鎖住了安接,一般是用戶錯誤的密碼嘗試次數(shù)太多翔忽,我們也可以修改允許的最大密碼輸入錯誤次數(shù),具體修改方法如下:

1盏檐、查看當(dāng)前設(shè)置值

select * from dba_profiles where RESOURCE_NAME='FAILED_LOGIN_ATTEMPTS';

2歇式、修改為30次

alter profile default limit FAILED_LOGIN_ATTEMPTS 30;

3、修改為無限次(為安全起見胡野,不建議使用)

alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;


修改用戶密碼

ALTER USER user_name IDENTIFIED BY new_password;  

密碼過期處理

使用 sqlplus 登錄管理員賬戶材失,查看指定概要文件(如default)的密碼有效期設(shè)置為 180 天:

SQL> SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';

PROFILE                RESOURCE_NAME            RESOURCE
------------------------------ -------------------------------- --------
LIMIT
----------------------------------------
DEFAULT                PASSWORD_LIFE_TIME       PASSWORD
180

將密碼有效期由默認(rèn)的 180 天修改成無限制,執(zhí)行:

alter profile default limit password_life_time unlimited; 

修改之后不需要重啟動數(shù)據(jù)庫硫豆,會立即生效龙巨。這會讓密碼沒有過期限制。

11g 之前的 Oracle 版本的默認(rèn) profile 是沒有密碼過期限制的熊响,而在 Oracle 11g 中旨别,默認(rèn)情況下 profile 啟用的密碼過期時間是 180 天。若登錄賬號的密碼已經(jīng)超過 180 天沒有修改了汗茄,就會出現(xiàn)提示密碼過期的問題秸弛,原來的賬戶就不能登錄到 Oracle 數(shù)據(jù)庫了。

另 2 種解決辦法:

  1. 使用sqlplus登錄出問題賬戶,會提示設(shè)置新密碼递览,此時重新輸入密碼即可叼屠,新密碼可以和原來的密碼相同。
  2. 使用sqlplus登錄管理員賬戶绞铃,執(zhí)行 alter user 賬戶名 identified by 新密碼镜雨,新密碼可以和原來的密碼相同。

查看鎖表情況

查看鎖表情況:

select t2.username, t2.sid,t2.serial#,t2.LOCKWAIT,t2.logon_time,t3.object_name,t1.LOCKED_MODE from v$locked_object t1, v$session t2, dba_objects t3 where t1.session_id = t2.sid and t1.object_id = t3.object_id order by t2.logon_time;

或

select t2.username,t2.sid,t2.serial#,t1.LOCKED_MODE,t2.logon_time 
from v$locked_object t1,v$session t2 
where t1.session_id=t2.sid order by t2.logon_time
/

查看鎖表語句:

假設(shè) sid 為 1306:

SELECT  sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN (SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value),DECODE(sql_hash_value, 0, prev_sql_addr, sql_address) FROM v$session b WHERE b.sid = '1306')   ORDER BY piece ASC;

查出原因后儿捧,解除數(shù)據(jù)庫中被鎖住的表(SID,SERIAL):

SID=39荚坞,SERIAL=1390

alter system kill session '39,1390’;

查看連接數(shù)

select * from v$session where username is not null

select username,count(username) from v$session where username is not null group by username

查看不同用戶的連接數(shù):

select count(*) from v$session  

并發(fā)連接數(shù):

Select count(*) from v$session where status='ACTIVE' 

查看 oralce 登錄用戶的IP

step1: 查看每個oracle帳戶的連接總數(shù):

select username,count(username) from v$session where username is not null group by username;

step2: 缺省從 v$session 中不能直接獲得客戶端 IP,可以在數(shù)據(jù)庫中創(chuàng)建一個追蹤客戶端IP地址的觸發(fā)器:

create or replace trigger on_logon_trigger after logon on database  
begin  
    dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));  
end;   
/

step3: 比較常用的顯示客戶端信息的sql(通過step2執(zhí)行以后纯命,再執(zhí)行step3西剥,新鏈接上來的客戶端信息,就能顯示ip了)

select sid,serial#,username,program,machine,client_info  
from v$session  
where username is not null  
order by username,program,machine;

sqlplus 每行信息顯示不全亿汞,使用SQL> set linesize 900;

查看大表有哪些

賬戶隔離瞭空,先切換到用戶下,然后查看疗我。

比如:查看 zilingzhi 用戶下大于 10000 行的表

SQL> conn  zilingzhi/zilingzhi
SQL> select table_name,num_rows from user_tables where num_rows>10000;

以此類推咆畏。

查看表屬于哪個用戶

select owner from dba_tables where table_name=upper('表名');

這個要求當(dāng)前登錄的用戶權(quán)限為 dba 或有查詢這個視圖的權(quán)限才行。
栗子:

SQL> select owner from dba_tables where table_name=upper('G_USERDATA_HISTORY');

OWNER
------------------------------
GENE_ICON2
GENE_ICON1

查看表結(jié)構(gòu)

desc table_name
SQL> SET LONG 9999
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','table_name') FROM DUAL;

查看字符集

SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

修改字符集

比如吴裤,將數(shù)據(jù)庫的字符集修改為:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

1旧找、關(guān)閉數(shù)據(jù)庫,修改 oracle 用戶的環(huán)境變量

shutdown immediate
vim  /home/oracle/.bash_profile 

將
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
修改為:
export NLS_LANG="Simplified Chinese_china”.ZHS16GBK

2麦牺、讓修改的參數(shù)生效

source /home/oracle/.bash_profile

3钮蛛、啟動數(shù)據(jù)庫

su - oracle
sqlplus / as sysdba
startup

查看表結(jié)構(gòu)及大小

查看表結(jié)構(gòu):

desc tablename;

查看表大小(M):

select segment_name,bytes/1024/1024 from dba_segments where segment_name in('G_USERDATA_HISTORY','G_AGENT_STATE_HISTORY','G_CALL_HISTORY','G_IR_HISTORY','G_PARTY_HISTORY');

truncate 表操作

conn usr_tmp1/usr_tmp1
truncate table     usr_tmp1.USERDATA_HISTORY;

查看用戶權(quán)限

查看用戶或角色系統(tǒng)權(quán)限(直接賦值給用戶或角色的系統(tǒng)權(quán)限):

select * from dba_sys_privs;
select * from user_sys_privs;

查看角色(只能查看登陸用戶擁有的角色)所包含的權(quán)限:

select * from role_sys_privs;

查看一個用戶的所有系統(tǒng)權(quán)限(包含角色的系統(tǒng)權(quán)限):

select privilege from dba_sys_privs where grantee='DATAUSER'  
union  
select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='DATAUSER' );

導(dǎo)入和導(dǎo)出

通過 exp 和 imp 導(dǎo)出導(dǎo)入:

exp(導(dǎo)出dmp):

exp TMP_USER/1  file=/data/backup/TMP_USER-$DATE.dmp owner=TMP_USER

imp(導(dǎo)入dmp):

imp TMP_USER/1     file=/data/backup/TMP_USER-26.dmp
EXP  有三種主要的方式(完全剖膳、用戶魏颓、表) 
A、完全:EXP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y 如果要執(zhí)行完全導(dǎo)出吱晒,必須具有特殊的權(quán)限 
B甸饱、用戶模式:EXP SONIC/SONIC    BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC 這樣用戶SONIC的所有對象被輸出到文件中。 
C仑濒、表模式:EXP SONIC/SONIC    BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC) 這樣用戶SONIC的表SONIC就被導(dǎo)出 

IMP 具有三種模式(完全叹话、用戶、表) 
A墩瞳、完全:IMP SYSTEM/MANAGER BUFFER=64000 FILE=C:\FULL.DMP FULL=Y
B驼壶、用戶模式:IMP SONIC/SONIC BUFFER=64000 FILE=C:\SONIC.DMP FROMUSER=SONIC TOUSER=SONIC 這樣用戶SONIC的所有對象被導(dǎo)入到文件中。必須指定FROMUSER喉酌、TOUSER參數(shù)辅柴,這樣才能導(dǎo)入數(shù)據(jù)箩溃。 
C、表模式:IMP SONIC/SONIC    BUFFER=64000 FILE=C:\SONIC.DMP OWNER=SONIC TABLES=(SONIC) 這樣用戶SONIC的表SONIC就被導(dǎo)入碌嘀。

Oracle 11g 可以通過expdp/impdp導(dǎo)入導(dǎo)出

expdp 導(dǎo)出:

源庫:SID=PROD2
用戶:test/oracle
表:t1
sqlplus / as sysdba
建立導(dǎo)出目錄(建立的目錄在系統(tǒng)層面必須存在)并賦讀寫權(quán)限:
create directory exp_dir as '/home/oracle/backup';
grant read,write on directory exp_dir to public;

系統(tǒng)下(Oracle用戶)進(jìn)行導(dǎo)出:
expdp system/oracle file=t1.dmp directory=exp_dir schemas=test;

impdp 導(dǎo)入:

目標(biāo)庫:SID=PROD1
用戶:test/oracle
原有表:test
注意:
1.按用戶導(dǎo)出導(dǎo)入,目標(biāo)庫不須先建立相應(yīng)用戶歪架,impdp導(dǎo)入會自動創(chuàng)建相應(yīng)用戶股冗。如果系統(tǒng)中已有該用戶,會把表導(dǎo)入到該用戶下和蚪,并且有對該表原有的操作權(quán)限止状。
2.把導(dǎo)出來的dmp文件拷貝到目標(biāo)庫的任意一個目錄(比如在/home/oracle/backup 目錄)并在數(shù)據(jù)庫中創(chuàng)建導(dǎo)入目錄并賦權(quán)

create directory exp_dir as '/home/oracle/backup';
grant read,write on directory exp_dir to public;

系統(tǒng)下(Oracle用戶)進(jìn)行導(dǎo)入:
impdp system/oracle file=t1.dmp directory=exp_dir schemas=test;

注意:導(dǎo)入時不加路徑會報錯
提示導(dǎo)入成功后登陸到數(shù)據(jù)庫進(jìn)行驗證:
sqlplus / as sysdba
conn test/oracle
select count(*) from t1;
發(fā)現(xiàn)t1表已經(jīng)導(dǎo)入到目標(biāo)庫test用戶下了,導(dǎo)入完成攒霹。

修改 undo怯疤,temp 表空間

當(dāng)undo表空間容量不足時,可以考慮增加新的數(shù)據(jù)文件或改變數(shù)據(jù)文件的大小催束。

將 undo tablespace 里面的 undo.dbf 文件擴(kuò)充為 10000M

alter database datafile '/data1/oradata/center/undo.dbf' resize 10000M;

將臨時數(shù)據(jù)文件大小調(diào)整為2G

ALTER DATABASE TEMPFILE  '/data1/oradata/center/temp.dbf' RESIZE 2G;

為 undo tablespace 添加新的數(shù)據(jù)文件

alter tablespace UNDOTS add datafile '/data1/oradata/center/undotbs02.dbf' size 20000M;

表空間擴(kuò)展集峦,增加表空間數(shù)據(jù)文件(ORA-01653)

比如已有表空間 KTS_kd_sale_dx 寫滿了,需要給表空間 KTS_kd_sale_dx 增加數(shù)據(jù)文件抠刺,以便業(yè)務(wù)可以繼續(xù)寫入塔淤。

查看表空間對應(yīng)的 datafile 的信息:

SELECT file_name,  
       tablespace_name,  
       bytes / 1024 / 1024    "bytes MB",  
       maxbytes / 1024 / 1024 "maxbytes MB"  
FROM   dba_data_files  
WHERE  tablespace_name = 'KTS_kd_sale_dx';  


FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME      bytes MB maxbytes MB
------------------------------ ---------- -----------
/data01/oradata/jinzheng/KTS_kd_sale_dx_01.DBF
KTS_kd_sale_dx          1323     0

/data01/oradata/jinzheng/KTS_kd_sale_dx_02.DBF
KTS_kd_sale_dx      1657.625     0

/data01/oradata/jinzheng/KTS_kd_sale_dx_03.DBF
KTS_kd_sale_dx        1267.5     0

查看表空間對應(yīng)的datafile是否可以自動擴(kuò)展(當(dāng)然有些場景開啟自動擴(kuò)展功能可能會帶來一些潛在的問題,所以不是所有的公司都開啟這個):

SELECT file_id,  
       file_name,  
       tablespace_name,  
       autoextensible,  
       increment_by  
FROM   dba_data_files  
WHERE  tablespace_name = 'KTS_kd_sale_dx'  
ORDER  BY file_id DESC; 

添加數(shù)據(jù)文件

alter   tablespace   KTS_kd_sale_dx  add   datafile   '/data01/oradata/jinzheng/KTS_kd_sale_dx_04.DBF'  
size   5G   autoextend   on  next 100m  maxsize   20G;
alter   tablespace   KTS_kd_sale_dx  add   datafile   '/data01/oradata/jinzheng/KTS_kd_sale_dx_05.DBF'  
size   5G   autoextend   on  next 100m maxsize   20G;
alter   tablespace   KTS_kd_sale_dx  add   datafile   '/data01/oradata/jinzheng/KTS_kd_sale_dx_06.DBF'  
size   5G   autoextend   on  next 100m   maxsize   20G;

該 tablespace創(chuàng)建時創(chuàng)建為普通表空間速妖,普通表空間最大限制是32G高蜂,寫滿 32G 了就會報錯 ORA-01653 無法繼續(xù)寫入。此時可以用如上方法罕容,增加數(shù)據(jù)文件的方式以讓業(yè)務(wù)先繼續(xù)寫入备恤。

一般大數(shù)據(jù)量的用戶所用表空間,可以創(chuàng)建為 bigfile tablespace 锦秒,這樣一般不會有上面的問題露泊。

create bigfile tablespace :

create bigfile tablespace  KTS_kd_sale_dx datafile '/data1/oradata/center/KTS_kd_sale_dx.dbf' size 50000M autoextend on next 10M maxsize unlimited;

刪除數(shù)據(jù)文件:

 alter tablespace KTS_kd_sale_dx drop datafile '/data01/oradata/jinzheng/KTS_kd_sale_dx_03.DBF' ;

Tips:

在Oracle 10g中,推出了Bigfile tablespace的概念脂崔。表空間Tablespace從Oracle 10g以后就分為兩個類型滤淳,smallfile tablespace和bigfile tablespace。過去一個表空間對應(yīng)多個數(shù)據(jù)文件我們稱為Smallfile Tablespace砌左。

所謂Bigfile Tablespace最顯著的差別就是一個表空間只能對應(yīng)一個數(shù)據(jù)文件脖咐。Bigfile Tablespace雖只對應(yīng)一個數(shù)據(jù)文件,但數(shù)據(jù)文件對應(yīng)的最大體積大大增加汇歹。傳統(tǒng)的small datafile每個文件中最多包括4M個數(shù)據(jù)塊屁擅,按照一個數(shù)據(jù)塊8K的大小核算,最大文件大小為32G产弹。每個Small Tablespace理論上能夠包括1024個數(shù)據(jù)文件派歌,這樣計算理論的最大值為32TB大小弯囊。而Bigfile Datafile具有更強(qiáng)大的數(shù)據(jù)塊block容納能力,最多能夠包括4G個數(shù)據(jù)塊胶果。同樣按照數(shù)據(jù)塊8K計算匾嘱,Bigfile Datafile大小為32KG=32TB。理論上small tablespace和big tablespace總?cè)萘肯嗤?

查看 Oracle 最耗時的 SQL

查看總消耗時間最多的前 10 條 SQL 語句:

select *
  from (select v.sql_id,
               v.child_number,
               v.sql_text,
               v.elapsed_time,
               v.cpu_time,
               v.disk_reads,
               rank() over(order by v.elapsed_time desc) elapsed_rank
          from v$sql v) a
 where elapsed_rank <= 10;

查看CPU消耗時間最多的前 10 條 SQL 語句:

select *
  from (select v.sql_id,
               v.child_number,
               v.sql_text,
               v.elapsed_time,
               v.cpu_time,
               v.disk_reads,
               rank() over(order by v.cpu_time desc) elapsed_rank
          from v$sql v) a
 where elapsed_rank <= 10;

查看消耗磁盤讀取最多的前 10 條 SQL 語句:

select *
  from (select v.sql_id,
               v.child_number,
               v.sql_text,
               v.elapsed_time,
               v.cpu_time,
               v.disk_reads,
               rank() over(order by v.disk_reads desc) elapsed_rank
          from v$sql v) a
 where elapsed_rank <= 10;

手動刪除歸檔日志

進(jìn)入 RMAN:

RMAN TARGET /

查看當(dāng)前所有的歸檔日志:

RMAN> list archivelog all;

手工刪除歸檔日志文件早抠,保留 15 天的歸檔日志

RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-15';

自動刪除歸檔日志

每臺 Oracle 機(jī)器都已配置了每天凌晨自動刪除不用的歸檔日志霎烙。

[oracle@oracle-test-001:/home/oracle]
$ crontab -l
1 1 * * * sh /data/backup/scripts/delete_archive_log.sh

刪除歸檔日志腳本 delete_archive_log.sh 示例:

$ cat /data/backup/scripts/delete_archive_log.sh

#/data/backup/scripts/backup_full.sh
export ORACLE_APP=/data/app/oracle
export ORACLE_BASE=$ORACLE_APP
export ORACLE_HOME=/data/app/oracle/product/11.2.0/db_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/usr/lib:/usr/local/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

CMD_FILE=/data/backup/scripts/delete_archive_log.rman
LOG_FILE=/data/backup/logs/delete_archive_log.logs
rman target / nocatalog cmdfile=$CMD_FILE msglog=$LOG_FILE
$ cat /data/backup/scripts/delete_archive_log.rman
RUN {
  delete force noprompt archivelog until time 'sysdate-15';
}
EXIT;

RMAN 無法刪除舊的歸檔日志解決辦法

一套 Oracle 11g 數(shù)據(jù)庫使用 RMAN 自動刪除歸檔日志, 卻沒辦法刪除舊的歸檔日志蕊连,而舊的歸檔日志占用了近 1T 空間悬垃,導(dǎo)致磁盤使用率很高。

使用 RMAN list archivelog all; 查看日志甘苍,沒有顯示舊歸檔日志的記錄尝蠕。

解決辦法
使用 catalog start with 命令重新注冊這些文件到控制文件中。

RMAN 刪除歸檔日志的依據(jù)是 controlfile 中記錄的歸檔日志载庭,而不是你磁盤上實際存在的歸檔日志
看彼,如果你的歸檔日志已經(jīng)不在 controlfile 中就無法被 RMAN 識別到,也就無法被刪除昧捷。而致于歸檔信息何時在控制文件中被覆蓋闲昭,這由一個參數(shù) control_file_record_keep_time 來控制。
查看數(shù)據(jù)庫中的參數(shù)是默認(rèn)的7天靡挥。

$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon May 20 11:32:26 2019

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show parameter CONTROL_FILE_RECORD_KEEP_TIME

NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7

難道是在控制文件中歸檔日志的記錄條數(shù)只能保留7天的么序矩?于是到 MOS 去找相關(guān)文檔找到一篇 Why Are Controlfile Entries For Archived Logs Not Overwritten After CONTROL_FILE_RECORD_KEEP_TIME ? (文檔 ID 1056085.1),文檔介紹 CONTROL_FILE_RECORD_KEEP_TIME 參數(shù)并不是強(qiáng)制在控制文件中保留多少天的歸檔日志條目跋破,而是由 V$CONTROLFILE_RECORD_SECTION 視圖中的 ARCHIVED LOG 條目去控制的簸淀,當(dāng) RECORDS_TOTAL=RECORDS_USED 時,舊的歸檔日志就會被覆蓋掉。

查看到 RECORDS_TOTAL=RECORDS_USED=1792 :

SQL> select * from v$controlfile_record_section where type='ARCHIVED LOG';

TYPE                 RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX
---------------------------- ----------- ------------- ------------ -----------
LAST_INDEX LAST_RECID
---------- ----------
ARCHIVED LOG                 584      1792         1792     900
       899  11651


SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
      1792

SQL> exit

這時應(yīng)該可以推斷出由于控制文件中只能保留 1792 條歸檔日志數(shù)據(jù)毒返,所以以前的歸檔信息已經(jīng)被控制文件刷出租幕,RMAN 無法識別到這些歸檔文件,所以就無法刪除這些歸檔日志拧簸。

那么現(xiàn)在如何使用 RMAN 刪除這些舊的歸檔日志呢劲绪?

使用 catalog start with 命令重新注冊這些舊的歸檔日志文件到控制文件中:

$ rman target /

Recovery Manager: Release 11.2.0.1.0 - Production on Mon May 20 11:40:29 2019

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database: CENTER (DBID=xxxxxxxxx)

RMAN>  catalog start with '/data1/oradata/center/archive';

using target database control file instead of recovery catalog
searching for all files that match the pattern /data1/oradata/center/archive

List of Files Unknown to the Database
=====================================
File Name: /data1/oradata/center/archive/1_1_990215949.dbf
File Name: /data1/oradata/center/archive/1_5_990215522.arc
File Name: /data1/oradata/center/archive/1_4_990215522.arc
File Name: /data1/oradata/center/archive/1_6_990215522.arc
File Name: /data1/oradata/center/archive/1_7_990215522.arc
.....  


Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /data1/oradata/center/archive/1_5_990215522.arc
File Name: /data1/oradata/center/archive/1_4_990215522.arc
File Name: /data1/oradata/center/archive/1_6_990215522.arc
File Name: /data1/oradata/center/archive/1_7_990215522.arc
..... 

此時,再 list archivelog all 就能看的舊的歸檔日志了盆赤,然后再刪除 60 天之前的歸檔日志即可:

RMAN> list archivelog all; 
.....  

RMAN> delete force noprompt archivelog until time 'sysdate-60';

再次查詢 v$controlfile_record_section 視圖贾富,RECORDS_TOTAL 也被“撐”大到了 7168 :

SQL> select * from v$controlfile_record_section where type='ARCHIVED LOG';

TYPE                 RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX
---------------------------- ----------- ------------- ------------ -----------
LAST_INDEX LAST_RECID
---------- ----------
ARCHIVED LOG                 584      7168         5070    6011
      3912  29224


SQL>

附錄

新建 Oracle 實例

Oracle DG 配置

Oracle 停機(jī)克隆

參考文檔

查詢耗時 SQL

Oracle 密碼過期處理

RMAN 刪除歸檔日志不釋放問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市牺六,隨后出現(xiàn)的幾起案子颤枪,更是在濱河造成了極大的恐慌,老刑警劉巖淑际,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畏纲,死亡現(xiàn)場離奇詭異扇住,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)盗胀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門艘蹋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人票灰,你說我怎么就攤上這事簿训。” “怎么了米间?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長膘侮。 經(jīng)常有香客問我屈糊,道長,這世上最難降的妖魔是什么琼了? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任逻锐,我火速辦了婚禮,結(jié)果婚禮上雕薪,老公的妹妹穿的比我還像新娘昧诱。我一直安慰自己,他們只是感情好所袁,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布盏档。 她就那樣靜靜地躺著,像睡著了一般燥爷。 火紅的嫁衣襯著肌膚如雪蜈亩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天前翎,我揣著相機(jī)與錄音稚配,去河邊找鬼。 笑死港华,一個胖子當(dāng)著我的面吹牛道川,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播立宜,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼冒萄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赘理?” 一聲冷哼從身側(cè)響起宦言,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎商模,沒想到半個月后奠旺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜘澜,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年响疚,在試婚紗的時候發(fā)現(xiàn)自己被綠了鄙信。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡忿晕,死狀恐怖装诡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情践盼,我是刑警寧澤鸦采,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站咕幻,受9級特大地震影響渔伯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肄程,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一锣吼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蓝厌,春花似錦玄叠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至崎苗,卻和暖如春狐粱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胆数。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工肌蜻, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人必尼。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓蒋搜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親判莉。 傳聞我的和親對象是個殘疾皇子豆挽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容