一、數(shù)據(jù)庫名
什么是數(shù)據(jù)庫名?
數(shù)據(jù)庫名就是一個(gè)數(shù)據(jù)庫的標(biāo)識,就像人的身份證號一樣。他用參數(shù)DB_NAME表示,如果一臺機(jī)器上裝了多全數(shù)據(jù)庫,那么每一個(gè)數(shù)據(jù)庫都有一個(gè)數(shù)據(jù)庫名。在數(shù)據(jù)庫安裝或創(chuàng)建完成之后,參數(shù)DB_NAME被寫入?yún)?shù)文件之中。格式如下:
DB_NAME=myorcl
...
在創(chuàng)建數(shù)據(jù)庫時(shí)就應(yīng)考慮好數(shù)據(jù)庫名,并且在創(chuàng)建完數(shù)據(jù)庫之后,數(shù)據(jù)庫名不宜修改,即使要修改也會(huì)很麻煩。因?yàn)椋瑪?shù)據(jù)庫名還被寫入控制文件中,控制文件是以二進(jìn)制型式存儲的,用戶無法修改控制文件的內(nèi)容。假設(shè)用戶修改了參數(shù)文件中的數(shù)據(jù)庫名,即修改DB_NAME的值。但是在Oracle啟動(dòng)時(shí),由于參數(shù)文件中的DB_NAME與控制文件中的數(shù)據(jù)庫名不一致,導(dǎo)致數(shù)據(jù)庫啟動(dòng)失敗,將返回ORA-01103錯(cuò)誤。
數(shù)據(jù)庫名的作用
數(shù)據(jù)庫名是在安裝數(shù)據(jù)庫、創(chuàng)建新的數(shù)據(jù)庫、創(chuàng)建數(shù)據(jù)庫控制文件、修改數(shù)據(jù)結(jié)構(gòu)、備份與恢復(fù)數(shù)據(jù)庫時(shí)都需要使用到的。
有很多Oracle安裝文件目錄是與數(shù)據(jù)庫名相關(guān)的,如:
winnt: d:\oracle\product\10.1.0\oradata\DB_NAME\...
Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/...
pfile:
winnt: d:\oracle\product\10.1.0\admin\DB_NAME\pfile\ini.ora
Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora
跟蹤文件目錄:
winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/...
另外,在創(chuàng)建數(shù)據(jù)時(shí),careate database命令中的數(shù)據(jù)庫名也要與參數(shù)文件中DB_NAME參數(shù)的值一致,否則將產(chǎn)生錯(cuò)誤。
同樣,修改數(shù)據(jù)庫結(jié)構(gòu)的語句alter database,當(dāng)然也要指出要修改的數(shù)據(jù)庫的名稱。
如果控制文件損壞或丟失,數(shù)據(jù)庫將不能加載,這時(shí)要重新創(chuàng)建控制文件,方法是以nomount方式啟動(dòng)實(shí)例,然后以create controlfile命令創(chuàng)建控制文件,當(dāng)然這個(gè)命令中也是指指DB_NAME。
還有在備份或恢復(fù)數(shù)據(jù)庫時(shí),都需要用到數(shù)據(jù)庫名。
總之,數(shù)據(jù)庫名很重要,要準(zhǔn)確理解它的作用。
查詢當(dāng)前數(shù)據(jù)名
方法一:select name from v$database;
方法二:show parameter db
方法三:查看參數(shù)文件。
修改數(shù)據(jù)庫名
前面建議:應(yīng)在創(chuàng)建數(shù)據(jù)庫時(shí)就確定好數(shù)據(jù)庫名,數(shù)據(jù)庫名不應(yīng)作修改,因?yàn)樾薷臄?shù)據(jù)庫名是一件比較復(fù)雜的事情。那么現(xiàn)在就來說明一下,如何在已創(chuàng)建數(shù)據(jù)之后,修改數(shù)據(jù)庫名。步驟如下:
1.關(guān)閉數(shù)據(jù)庫。
2.修改數(shù)據(jù)庫參數(shù)文件中的DB_NAME參數(shù)的值為新的數(shù)據(jù)庫名。
3.以NOMOUNT方式啟動(dòng)實(shí)例,修建控制文件(有關(guān)創(chuàng)建控制文件的命令語法,請參考oracle文檔)
二、數(shù)據(jù)庫實(shí)例名
什么是數(shù)據(jù)庫實(shí)例名?
數(shù)據(jù)庫實(shí)例名是用于和操作系統(tǒng)進(jìn)行聯(lián)系的標(biāo)識,就是說數(shù)據(jù)庫和操作系統(tǒng)之間的交互用的是數(shù)據(jù)庫實(shí)例名。實(shí)例名也被寫入?yún)?shù)文件中,該參數(shù)為instance_name,在winnt平臺中,實(shí)例名同時(shí)也被寫入注冊表。
數(shù)據(jù)庫名和實(shí)例名可以相同也可以不同。
在一般情況下,數(shù)據(jù)庫名和實(shí)例名是一對一的關(guān)系,但如果在oracle并行服務(wù)器架構(gòu)(即oracle實(shí)時(shí)應(yīng)用集群)中,數(shù)據(jù)庫名和實(shí)例名是一對多的關(guān)系。這一點(diǎn)在第一篇中已有圖例說明。
查詢當(dāng)前數(shù)據(jù)庫實(shí)例名
方法一:select instance_name from v$instance;
方法二:show parameter instance
方法三:在參數(shù)文件中查詢。
數(shù)據(jù)庫實(shí)例名與ORACLE_SID
雖然兩者都表是oracle實(shí)例,但兩者是有區(qū)別的。instance_name是oracle數(shù)據(jù)庫參數(shù)。而ORACLE_SID是操作系統(tǒng)的環(huán)境變量。ORACLD_SID用于與操作系統(tǒng)交互,也就是說,從操作系統(tǒng)的角度訪問實(shí)例名,必須通過ORACLE_SID。在winnt不臺,ORACLE_SID還需存在于注冊表中。
且ORACLE_SID必須與instance_name的值一致,否則,你將會(huì)收到一個(gè)錯(cuò)誤,在unix平臺,是“ORACLE not available”,在winnt平臺,是“TNS:協(xié)議適配器錯(cuò)誤”。
數(shù)據(jù)庫實(shí)例名與網(wǎng)絡(luò)連接
數(shù)據(jù)庫實(shí)例名除了與操作系統(tǒng)交互外,還用于網(wǎng)絡(luò)連接的oracle服務(wù)器標(biāo)識。當(dāng)你配置oracle主機(jī)連接串的時(shí)候,就需要指定實(shí)例名。當(dāng)然8i以后版本的網(wǎng)絡(luò)組件要求使用的是服務(wù)名SERVICE_NAME。這個(gè)概念接下來說明。
三、數(shù)據(jù)庫域名
什么是數(shù)據(jù)庫域名?
在分布工數(shù)據(jù)庫系統(tǒng)中,不同版本的數(shù)據(jù)庫服務(wù)器之間,不論運(yùn)行的操作系統(tǒng)是unix或是windows,各服務(wù)器之間都可以通過數(shù)據(jù)庫鏈路進(jìn)行遠(yuǎn)程復(fù)制,數(shù)據(jù)庫域名主要用于oracle分布式環(huán)境中的復(fù)制。舉例說明如:
全國交通運(yùn)政系統(tǒng)的分布式數(shù)據(jù)庫,其中:
福建節(jié)點(diǎn): fj.jtyz
福建廈門節(jié)點(diǎn): xm.fj.jtyz
江西: jx.jtyz
江西上饒:sr.jx.jtyz
這就是數(shù)據(jù)庫域名。
數(shù)據(jù)庫域名在存在于參數(shù)文件中,他的參數(shù)是db_domain.
查詢數(shù)據(jù)庫域名
方法一:select value from v$parameter where name = 'db_domain';
方法二:show parameter domain
方法三:在參數(shù)文件中查詢。
全局?jǐn)?shù)據(jù)庫名
全局?jǐn)?shù)據(jù)庫名=數(shù)據(jù)庫名+數(shù)據(jù)庫域名,如前述福建節(jié)點(diǎn)的全局?jǐn)?shù)據(jù)庫名是:oradb.fj.jtyz
四、數(shù)據(jù)庫服務(wù)名
什么是數(shù)據(jù)庫服務(wù)名?
從oracle9i版本開始,引入了一個(gè)新的參數(shù),即數(shù)據(jù)庫服務(wù)名。參數(shù)名是SERVICE_NAME。
如果數(shù)據(jù)庫有域名,則數(shù)據(jù)庫服務(wù)名就是全局?jǐn)?shù)據(jù)庫名;否則,數(shù)據(jù)庫服務(wù)名與數(shù)據(jù)庫名相同。
查詢數(shù)據(jù)庫服務(wù)名
方法一:select value from v$parameter where name = 'service_name';
方法二:show parameter service_name
方法三:在參數(shù)文件中查詢。
數(shù)據(jù)庫服務(wù)名與網(wǎng)絡(luò)連接
從oracle8i開如的oracle網(wǎng)絡(luò)組件,數(shù)據(jù)庫與客戶端的連接主機(jī)串使用數(shù)據(jù)庫服務(wù)名。之前用的是ORACLE_SID,即數(shù)據(jù)庫實(shí)例名。
SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 7月 5 09:50:36 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
已連接。
SQL> shutdown normal
ORA-01109: 數(shù)據(jù)庫未打開
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 83886784 bytes
Database Buffers 197132288 bytes
Redo Buffers 7139328 bytes
數(shù)據(jù)庫裝載完畢。
SQL> alter database open
2 ;
alter database open
*
第 1 行出現(xiàn)錯(cuò)誤:
ORA-00600: 內(nèi)部錯(cuò)誤代碼, 參數(shù): [kcratr1_lastbwr], [], [], [], [], [], [], []
SQL> alter database noarchivelog;
數(shù)據(jù)庫已更改。
SQL> alter database open;
alter database open
*
第 1 行出現(xiàn)錯(cuò)誤:
ORA-00600: 內(nèi)部錯(cuò)誤代碼, 參數(shù): [kcratr1_lastbwr], [], [], [], [], [], [], []
SQL> shutdown immediate
ORA-01109: 數(shù)據(jù)庫未打開
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 83886784 bytes
Database Buffers 197132288 bytes
Redo Buffers 7139328 bytes
數(shù)據(jù)庫裝載完畢。
SQL> recover database;
完成介質(zhì)恢復(fù)。
SQL> alter database open;
數(shù)據(jù)庫已更改。
SQL> exit
將表空間和數(shù)據(jù)文件從一個(gè)位置移動(dòng)到另一個(gè)位置的操作方法
一. OFFLINE
OFFLINE 分為ALTER DATABASE 與 ALTER TABLESPACE OFFLINE,
他們的區(qū)別參看blog:http://blog.csdn.net/tianlesoftware/archive/2009/11/29/4898800.aspx
按數(shù)據(jù)文件來:
1.先將相應(yīng)的數(shù)據(jù)文件 offline
ALTER DATABASE DATAFILE 'D:\ORACLE\ORADATA\DBA\TEST01.DBF' OFFLINE;
2.把數(shù)據(jù)文件 copy 到新位置
3. alter database rename file 'D:\ORACLE\ORADATA\DBA\TEST01.DBF' to 'D:\TEST01.DBF';
4. 介質(zhì)恢復(fù)(offline 數(shù)據(jù)文件必須要介質(zhì)恢復(fù))
recover datafile 'D:\TEST01.DBF'
5. 將相應(yīng)的數(shù)據(jù)文件 online
SQL>ALTER DATABASE DATAFILE 'D:\TEST01.DBF' ONLINE;
按表空間來:
1.先將相應(yīng)的表空間 offline
SQL>alter tablespace test offline;
2.把數(shù)據(jù)文件 copy 到新位置
3. alter tablespace TEST rename datafile 'D:\TEST01.DBF' to 'D:\ORACLE\ORADATA\DBA\TEST01.DBF'
4. 將表空間 online
SQL>alter tablespace test online;
二. Shutdown 數(shù)據(jù)庫
1. 關(guān)閉數(shù)據(jù)庫
C:>set ORACLE_SID=DBA
C:>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期日 11月 29 11:14:02 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn sys/admin as sysdba
已連接。
SQL> shutdown immediate
數(shù)據(jù)庫已經(jīng)關(guān)閉。
已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL>
2. 把數(shù)據(jù)文件 copy 到新位置
3. rename datafile
SQL> startup mount
ORACLE 例程已經(jīng)啟動(dòng)。
Total System Global Area 289406976 bytes
Fixed Size 1248576 bytes
Variable Size 71303872 bytes
Database Buffers 209715200 bytes
Redo Buffers 7139328 bytes
數(shù)據(jù)庫裝載完畢。
SQL> alter database rename file 'D:\ORACLE\ORADATA\DBA\TEST01.DBF' to 'D:\TEST01
.DBF';
數(shù)據(jù)庫已更改。
SQL> alter database open;
數(shù)據(jù)庫已更改。
SQL> select file#,name,status from v$datafile;
FILE# NAME STATUS
-------- ------------------------------------------------------- ---------------
1 D:\ORACLE\ORADATA\DBA\SYSTEM01 SYSTEM
2 D:\ORACLE\ORADATA\DBA\UNDOTBS0 ONLINE
3 D:\ORACLE\ORADATA\DBA\SYSAUX01 ONLINE
4 D:\ORACLE\ORADATA\DBA\USERS01. ONLINE
5 D:\TEST01.DBF ONLINE
1、刪除多余的歸檔日志
在ORACLE10G中,默認(rèn)的歸檔路徑為$ORACLE_BASE/flash_recovery_area。對于這個(gè)路徑,ORACLE有一個(gè)限制,就是默認(rèn)只能有2G的空間給歸檔日志使用,可以使用下面兩個(gè)SQL語句去查看它的限制:
1. select * from v$recovery_file_dest;
2. show parameter db_recovery_file_dest(這個(gè)更友好直觀一些)
當(dāng)歸檔日志數(shù)量大于2G時(shí),那么就會(huì)由于沒有更多的空間去容納更多的歸檔日志會(huì)報(bào)無法繼續(xù)歸檔的錯(cuò)誤。
如:“RA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 10017792 bytes disk space from 2147483648 limit
ARC0: Error 19809 Creating archive log file to '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2007_04_30/o1_mf_1_220_0_.arc' ”這時(shí)我們可以修改它的默認(rèn)限制,比如說將它增加到5G或更多,也可以將歸檔路徑重新置到別的路徑,就不會(huì)有這個(gè)限制了。
更改限制語句如下:
alter system set db_recovery_file_dest_size=5368709102 (這里為5G 5x1024x1024x1024=5G)
alter system set db_recovery_file_dest_size=10737418240
進(jìn)入
執(zhí)行下邊的交叉校驗(yàn)
crosscheck archivelog all;
此時(shí)可能會(huì)提示校驗(yàn)失敗,類似下邊的提示:
RMAN> crosscheck archivelog all;
釋放的通道: ORA_DISK_1
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=14 devtype=DISK
對歸檔日志的驗(yàn)證失敗
…………….
這時(shí),需要執(zhí)行exit退出rman。
在命令提示符窗口下執(zhí)行下邊的字符集設(shè)置
C:>set nls_lang=american_america.zhs16gbk
然后再進(jìn)入rman ,再執(zhí)行crosscheck archivelog all;一般不會(huì)再出現(xiàn)這樣的問題了。
在命令窗口里面執(zhí)行
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
說明
SYSDATA-7,表明當(dāng)前的系統(tǒng)時(shí)間7天前,before關(guān)鍵字表示在7天前的歸檔日志,如果使用了閃回功能,也會(huì)刪除閃回的數(shù)據(jù)。
同樣道理,也可以刪除從7天前到現(xiàn)在的全部日志,不過這個(gè)命令要考慮清楚,做完這個(gè)刪除,最好馬上進(jìn)行全備份數(shù)據(jù)庫
DELETE ARCHIVELOG FROM TIME 'SYSDATE-7';
UNIX/LINUX下也可以通過FIND找到7天前的歸檔數(shù)據(jù),使用EXEC子操作刪除
find /oraarchive -xdev -mtime +7 -name "*.dbf" -exec rm -f {} ;
這樣做仍然會(huì)在RMAN里留下未管理的歸檔文件
仍需要在RMAN里執(zhí)行下面2條命令
crosscheck archivelog all;
delete expired archivelog all;
所以還不如上面的方法好用,不過用FIND的好處就是,可以在條件上,和EXEC子項(xiàng)上做很多操作,實(shí)現(xiàn)更復(fù)雜的功能
2、report obsolete及delete obsolete刪除過期備份命令
使用report obsolete命令報(bào)告過期備份
RMAN> report obsolete;
RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
Report of obsolete backups and copies
Type Key Completion Time Filename/Handle
-------------------- ------ ------------------ --------------------
Backup Set 125 01-NOV-04
Backup Piece 125 01-NOV-04 /data1/oracle/orabak/full_1_541045804
Backup Set 131 04-NOV-04
Backup Piece 131 04-NOV-04 /data1/oracle/orabak/full_AVATAR2_20041104_131
....
使用delete obsolete命令刪除過期備份:
RMAN> delete obsolete;
RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
using channel ORA_DISK_1
Deleting the following obsolete backups and copies:
Type Key Completion Time Filename/Handle
-------------------- ------ ------------------ --------------------
Backup Set 125 01-NOV-04
Backup Piece 125 01-NOV-04 /data1/oracle/orabak/full_1_541045804
....
Archive Log 2704 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2716.dbf
Archive Log 2703 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2715.dbf
Archive Log 2702 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2714.dbf
Do you really want to delete the above objects (enter YES or NO)? yes
deleted backup piece
backup piece handle=/data1/oracle/orabak/full_AVATAR2_20041206_173 recid=173 stamp=544156241
.....
注:在執(zhí)行刪除的時(shí)候,可能會(huì)提示下邊的報(bào)錯(cuò)信息:
ORA-19554: 配置設(shè)備時(shí)出錯(cuò), 設(shè)備類型: SBT_TAPE, 設(shè)備名稱:
ORA-27211: 未能加載介質(zhì)管理庫
解決方法,運(yùn)行下邊的命令:
RMAN> allocate channel for maintenance type disk;
RMAN> crosscheck archivelog all;
RMAN> delete obsolete;
3、Oracle RMAN的show,list,crosscheck,delete
Oracle RMAN的show,list,crosscheck,delete 命令整理
1、SHOW命令:
顯示rman配置: RMAN> show all;
2、REPORT命令:
2.1、RMAN> report schema 報(bào)告目標(biāo)數(shù)據(jù)庫的物理結(jié)構(gòu);
2.2、RMAN>report need backup days=3; 報(bào)告最近3天沒有被備份的數(shù)據(jù)文件;
2.3、RMAN> report need backup days 3 tablespace users; 在USERS表空間上3天未備份的數(shù)據(jù)文件;
2.4、RMAN> report need backup incremental 3; 報(bào)告恢復(fù)數(shù)據(jù)文件需要的增量備份個(gè)數(shù)超過3次的數(shù)據(jù)文件;
2.5、RMAN> report need backup redundancy 2 database; 報(bào)告?zhèn)浞菸募陀?/span>2份的所有數(shù)據(jù)文件;
RMAN>report need backup redundancy=2;
2.6、RMAN> report need backup recovery window of 6 days; 報(bào)告文件報(bào)表的恢復(fù)需要超過6天的歸檔日志的數(shù)據(jù)文件;
2.7、RMAN> report unrecoverable; 報(bào)告數(shù)據(jù)庫所有不可恢復(fù)的數(shù)據(jù)文件;
2.8、RMAN> report obsolete redunndancy 2; 報(bào)告?zhèn)浞荽螖?shù)超過2次的陳舊備份;
2.9、RMAN>report obsolete; 報(bào)告多余的備份;
3、LIST命令:列出備份信息
3.1、列出數(shù)據(jù)文件備份集
RMAN>list backup 列出詳細(xì)備份;
RMAN>list expired backup 列出過期備份;
RMAN> list backup of database; 列出所有數(shù)據(jù)文件的備份集;
RMAN> list backup of tablespace user01; 列出特定表空間的所有數(shù)據(jù)文件備份集;
3.2、RMAN> list backup of controlfile 列出控制文件備份集;
3.3、RMAN> list backup of archivelog all 列出歸檔日志備份集詳細(xì)信息;
RMAN>list archivelog all; 列出歸檔日志備份集簡要信息
3.4、RMAN> list backup of spfile 列出SPFILE備份集;
3.5、RMAN> list copy of datafile 5 列出數(shù)據(jù)文件映像副本;
3.6、RMAN> list copy of controlfile 列出控制文件映像副本;
3.7、RMAN> list copy of archivelog all 列出歸檔日志映像副本;
3.8、RMAN> list incarnation of database 列出對應(yīng)物/列出數(shù)據(jù)庫副本;
3.9、RMAN>list backup summary; 概述可用的備份;
B表示backup
F表示FULL
A表示archive log
0 1表示incremental backup
S說明備份狀態(tài)(A AVAILABLE X EXPIRED )
3.10、RMAN>list backup by file 按備份類型列出備份;
按照數(shù)據(jù)文件備份,歸檔日志備份,控制文件備份,服務(wù)器參數(shù)文件備份 列出
4、CROSSCHECK命令:校驗(yàn)備份信息
4.1、RMAN> crosscheck backup 核對所有備份集;
4.2、RMAN> crosscheck backup of database 核對所有數(shù)據(jù)文件的備份集;
4.3、RMAN> crosscheck backup of tablespace users 核對特定表空間的備份集;
4.4、RMAN> crosscheck backup of datafile 4 核對特定數(shù)據(jù)文件的備份集;
4.5、RMAN> crosscheck backup of controlfile 核對控制文件的備份集;
4.6、RMAN> crosscheck backup of spfile 核對SPFILE的備份集;
4.7、RMAN> crosscheck backup of archivelog sequence 3 核對歸檔日志的備份集;
4.8、RMAN> crosscheck copy 核對所有映像副本;
4.9、RMAN> crosscheck copy of database 核對所有數(shù)據(jù)文件的映像副本;
4.10、RMAN> crosscheck copy of tablespace users 核對特定表空間的映像副本;
4.11、RMAN> crosscheck copy of datafile 6 核對特定數(shù)據(jù)文件的映像副本;
4.12、RMAN> crosscheck copy of archivelog sequence 4 核對歸檔日志的映像副本;
4.13、RMAN> crosscheck copy of controlfile 核對控制文件的映像副本;
4.14、RMAN> crosscheck backup tag='SAT_BACKUP';
4.15、RMAN> crosscheck backup completed after 'sysdate - 2'
4.16、RMAN> crosscheck backup completed between 'sysdate - 5' and 'sysdate -2 '
4.17、RMAN> crosscheck backup device type sBT;
4.18、RMAN> crosscheck archivelog all;
4.19、RMAN> crosscheck archivelog like '%ARC00012.001'
4.20、RMAN> crosscheck archivelog from sequence 12;
4.21、RMAN> crosscheck archivelog until sequence 522;
5、DELETE:刪除備份
5.1、RMAN> delete obsolete; 刪除陳舊備份;
5.2、RMAN> delete expired backup; 刪除EXPIRED備份
5.3、RMAN> delete expired copy; 刪除EXPIRED副本;
5.4、RMAN> delete backupset 19; 刪除特定備份集;
5.5、RMAN> delete backuppiece ''d:\backup\DEMO_19.bak'' 刪除特定備份片;
5.6、RMAN> delete backup 刪除所有備份集;
5.7、RMAN> delete datafilecopy ''d:\backup\DEMO_19.bak'' 刪除特定映像副本;
5.8、RMAN> delete copy 刪除所有映像副本;
5.9、RMAN> delete archivelog all delete input;
RMAN> delete backupset 22 format = ''d:\backup\%u.bak'' delete input
在備份后刪除輸入對象;
5.10、RMAN> delete backupset id;
4、em控制臺對備份的操作
使用sys用戶的sysdba權(quán)限進(jìn)入em控制臺
在“維護(hù)”模塊下,點(diǎn)擊進(jìn)入到“管理當(dāng)前備份”操作選項(xiàng)。
如果要?jiǎng)h除備份,可以在下邊的列表中選中要?jiǎng)h除的備份集,執(zhí)行“刪除”命令,這時(shí)會(huì)有一個(gè)確認(rèn)提示的頁面:
點(diǎn)擊“是”按鈕,進(jìn)行刪除操作。如果提示操作“刪除”失敗,可以將上一步要執(zhí)行的命令在命令提示符下使用rman命令來執(zhí)行。
5、小結(jié)
像歸檔日志之類的備份,備份的文件夾是在一個(gè)叫flash_recovery_area的目錄下邊。
1、歸檔日志備份在ARCHIVELOG 這個(gè)文件夾下邊,上邊對歸檔日志的操作基本上是對這個(gè)文件夾下的文件進(jìn)行操作。
2、obsolete刪除操作基本上是對AUTOBACKUP這個(gè)文件夾下的文件進(jìn)行操作。(不是十分的確定)
3、delete backup操作基本上是對BACKUPSET文件夾和DATAFILE文件夾的內(nèi)容進(jìn)行操作的。
4、在em管理后臺,最下邊有一個(gè)“相關(guān)鏈接”模塊,下有“作業(yè)”選項(xiàng)鏈接,可以看到所有數(shù)據(jù)庫備份操作歷史作業(yè)記錄,在此可以對相應(yīng)的備份作業(yè)進(jìn)行修改操作。
另外如果要添加備份操作作業(yè)時(shí),需要在“維護(hù)”模塊下找到“調(diào)試備份”鏈接,推薦使用“Oracle 建議的備份”來添加備份操作作業(yè)。
Linux下查看文件夾大小的命令du -sh docname
select * from v$sqlarea t order by t.LAST_ACTIVE_TIME desc
注意 :執(zhí)行此語句等等一些相關(guān)的語句 必須具有DBA 的權(quán)限 雖然這條語句很普通 但是需要的時(shí)候很管用 能夠及時(shí)查出一個(gè)人執(zhí)行sql語句情況
-------oracle 查看已經(jīng)執(zhí)行過的sql 這些是存在共享池中的 --------->
select * from v$sqlarea t order by t.LAST_ACTIVE_TIME desc
-----------查看oracle會(huì)話----------------------------》
select * from v$session t order by t.LAST_ACTIVE_TIME desc
-------------查看oracle的權(quán)限角色------------------------------>
select * from dba_role_privs; 授予用戶和其他角色的角色
select * from dba_sys_privs; 授予用戶和其他角色的系統(tǒng)權(quán)限
select * from dba_tab_privs; 數(shù)據(jù)庫中對象的所有授權(quán)
select * from user_role_privs; 查看當(dāng)前用戶的角色
http://hi.baidu.com/taojia/blog/item/7d5656b5af5165c637d3ca55.html
ORA-00257: archiver error. Connect internal only, until freed.
Oracle 10g數(shù)據(jù)庫物理空間管理方式與以前Oracle發(fā)生了變化,對歸檔日志所在的Flash_Recovery_Area空間進(jìn)行了另外限制
Flash_Recovery_Area空間缺省安裝時(shí)比較小,只有2GB,容易用完
解決過程
根據(jù)數(shù)據(jù)庫目前可用存儲空間情況、FLASH_RECOVERY_AREA空間為2GB的實(shí)際情況,把FLASH_RECOVERY_AREA的空間修改為20GB()。
SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE=20g;
系統(tǒng)已更改。
(其實(shí)問題的本質(zhì)是歸檔日志的使用已經(jīng)達(dá)到了spfile等啟動(dòng)參數(shù)文件中指定的最大值。oracle 10g中歸檔日志默認(rèn)的存放地是閃回目錄,即%ORACLE_BASE%/flash_recovery_area的相應(yīng)實(shí)例名下面,這個(gè)位置的大小在參數(shù)文件中有個(gè)限制,解決空間不足的問題可以通過兩種方式來實(shí)現(xiàn),一個(gè)修改這個(gè)大小限制,還有一個(gè)就是修改歸檔日志存放位置。)
如果不要這些archivelog的話,可以刪除一些
rman>DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE-3'; 直接運(yùn)行這條 這樣會(huì)只保留三天的歸檔
sql> select * from v$flash_recovery_area_usage;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------------- ------------------------------------- ----------------------------------------------------- -------------------------------
CONTROLFILE 0 0 0
ONLINELOG 0 0 0
ARCHIVELOG 6.11 0 3
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
還可參考:http://www.eygle.com/archives/2004/12/rman_crosscheck.html
Rman Crosscheck刪除失效歸檔
當(dāng)手工刪除了歸檔日志以后,Rman備份會(huì)檢測到日志缺失,從而無法進(jìn)一步繼續(xù)執(zhí)行。
所以此時(shí)需要手工執(zhí)行crosscheck過程,之后Rman備份可以恢復(fù)正常。
1.Crosscheck日志
$ rman target /
Recovery Manager: Release 9.2.0.4.0 - 64bit Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.
connected to target database: AVATAR2 (DBID=2480694409)
RMAN> crosscheck archivelog all;
using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=25 devtype=DISK
validation failed for archived log
archive log filename=/opt/oracle/oradata/avatar2/archive/1_2714.dbf recid=2702 stamp=545107659
validation failed for archived log
archive log filename=/opt/oracle/oradata/avatar2/archive/1_2715.dbf recid=2703 stamp=545108268
...........
validation failed for archived log
archive log filename=/opt/oracle/oradata/avatar2/archive/1_2985.dbf recid=2973 stamp=545399327
validation succeeded for archived log
archive log filename=/opt/oracle/oradata/avatar2/archive/1_2986.dbf recid=2974 stamp=545400820
validation succeeded for archived log
archive log filename=/opt/oracle/oradata/avatar2/archive/1_2987.dbf recid=2975 stamp=545401757
validation succeeded for archived log
archive log filename=/opt/oracle/oradata/avatar2/archive/1_2988.dbf recid=2976 stamp=545402716
validation succeeded for archived log
archive log filename=/opt/oracle/oradata/avatar2/archive/1_2989.dbf recid=2977 stamp=545403661
validation succeeded for archived log
archive log filename=/opt/oracle/oradata/avatar2/archive/1_2990.dbf recid=2978 stamp=545404946
validation succeeded for archived log
archive log filename=/opt/oracle/oradata/avatar2/archive/1_2991.dbf recid=2979 stamp=545406220
Crosschecked 278 objects
RMAN>
2.使用delete expired archivelog all 命令刪除所有過期歸檔日志:
RMAN> delete expired archivelog all;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=12 devtype=DISK
List of Archived Log Copies
Key Thrd Seq S Low Time Name
------- ---- ------- - --------- ----
376 1 2714 X 23-NOV-04 =/opt/oracle/oradata/avatar2/archive/1_2714.dbf
.....
3.簡要介紹一下report obsolete命令
使用report obsolete命令報(bào)告過期備份
RMAN> report obsolete;
RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
Report of obsolete backups and copies
Type Key Completion Time Filename/Handle
-------------------- ------ ------------------ --------------------
Backup Set 125 01-NOV-04
Backup Piece 125 01-NOV-04 /data1/oracle/orabak/full_1_541045804
Backup Set 131 04-NOV-04
Backup Piece 131 04-NOV-04 /data1/oracle/orabak/full_AVATAR2_20041104_131
....
Backup Set 173 06-DEC-04
Backup Piece 173 06-DEC-04 /data1/oracle/orabak/full_AVATAR2_20041206_173
Backup Set 179 11-DEC-04
Backup Piece 179 11-DEC-04 /data1/oracle/orabak/arch544588206.arc
.....
Backup Piece 189 17-DEC-04 /data1/oracle/orabak/arch545106606.arc
Backup Set 190 17-DEC-04
Backup Piece 190 17-DEC-04 /data1/oracle/orabak/arch545106665.arc
Backup Set 191 20-DEC-04
Backup Piece 191 20-DEC-04 /data1/oracle/orabak/arch_AVATAR2_20041220_194
Archive Log 2973 20-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2985.dbf
Archive Log 2971 20-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2984.dbf
.....
Archive Log 2705 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2717.dbf
Archive Log 2704 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2716.dbf
Archive Log 2703 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2715.dbf
Archive Log 2702 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2714.dbf
4.使用delete obsolete命令刪除過期備份:
RMAN> delete obsolete;
RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
using channel ORA_DISK_1
Deleting the following obsolete backups and copies:
Type Key Completion Time Filename/Handle
-------------------- ------ ------------------ --------------------
Backup Set 125 01-NOV-04
Backup Piece 125 01-NOV-04 /data1/oracle/orabak/full_1_541045804
....
Archive Log 2704 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2716.dbf
Archive Log 2703 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2715.dbf
Archive Log 2702 17-DEC-04 /opt/oracle/oradata/avatar2/archive/1_2714.dbf
Do you really want to delete the above objects (enter YES or NO)? yes
deleted backup piece
backup piece handle=/data1/oracle/orabak/full_AVATAR2_20041206_173 recid=173 stamp=544156241
.....
deleted archive log
archive log filename=/opt/oracle/oradata/avatar2/archive/1_2715.dbf recid=2703 stamp=545108268
deleted archive log
archive log filename=/opt/oracle/oradata/avatar2/archive/1_2714.dbf recid=2702 stamp=545107659
Deleted 286 objects
RMAN> crosscheck archivelog all;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=19 devtype=DISK
specification does not match any archive log in the recovery catalog
-The End-
-- job 權(quán)限
grant create job to somebody;
-- job 創(chuàng)建
begin
dbms_scheduler.create_job (
job_name => 'AGENT_LIQUIDATION_JOB',
job_type => 'STORED_PROCEDURE',
job_action => 'AGENT_LIQUIDATION.LIQUIDATION', --存儲過程名
start_date => sysdate,
repeat_interval => 'FREQ=MONTHLY; INTERVAL=1; BYMONTHDAY=1;BYHOUR=1;BYMINUTE=0;BYSECOND=0', -- 按月,間隔為1個(gè)(月),每月1號,凌晨1點(diǎn)
comments => '執(zhí)行代理商清分程序'
);
end;
/
-- job 執(zhí)行時(shí)間測試
DECLARE
start_date date;
return_date_after date;
next_run_date date;
BEGIN
start_date := sysdate;--to_timestamp_tz('10-OCT-2004 10:00:00','DD-MM-YYYY HH24:MI:SS');
return_date_after := start_date;
FOR i IN 1..10 LOOP
DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING('FREQ=MONTHLY; INTERVAL=1; BYMONTHDAY=1;BYHOUR=1;BYMINUTE=0;BYSECOND=0',start_date, return_date_after, next_run_date);
DBMS_OUTPUT.PUT_LINE('next_run_date: ' || to_char(next_run_date,'yyyy-mm-dd HH24:MI:SS'));
return_date_after := next_run_date;
END LOOP;
END;
/
-- job 查詢
select owner, job_name, state from dba_scheduler_jobs;
select job_name, state from user_scheduler_jobs;
select * from all_jobs;
-- job 啟用
begin
dbms_scheduler.enable('BACKUP_JOB');
end;
/
-- job 運(yùn)行
begin
dbms_scheduler.run_job('COLA_JOB',TRUE); -- true代表同步執(zhí)行
end;
/
-- job 停止(不太好用)
begin
dbms_scheduler.stop_job(job_name => 'COLA_JOB',force => TRUE);
end;
/
-- job 刪除(對停job來說好用)
begin
dbms_scheduler.drop_job(job_name => 'COLA_JOB',force => TRUE);)
end;
/
存儲過程里不能直接使用DDL語句,所以只能使用動(dòng)態(tài)SQL語句來執(zhí)行
--ON COMMIT DELETE ROWS 說明臨時(shí)表是事務(wù)指定,每次提交后ORACLE將截?cái)啾恚▌h除全部行)
--ON COMMIT PRESERVE ROWS 說明臨時(shí)表是會(huì)話指定,當(dāng)中斷會(huì)話時(shí)ORACLE將截?cái)啾怼?/p>
CREATE OR REPLACE PROCEDURE temptest
(p_searchDate IN DATE)
IS
v_count INT;
str varchar2(300);
BEGIN
v_count := 0;
str:='drop table SETT_DAILYTEST';
execute immediate str;
str:='CREATE GLOBAL TEMPORARY TABLE SETT_DAILYTEST (
NACCOUNTID NUMBER not null,
NSUBACCOUNTID NUMBER not null)
ON COMMIT PRESERVE ROWS';
execute immediate str; ----使用動(dòng)態(tài)SQL語句來執(zhí)行
str:='insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance)';
execute immediate str;
END temptest;
上面建立一個(gè)臨時(shí)表的存儲過程
下面是執(zhí)行一些操作,向臨時(shí)表寫數(shù)據(jù)。
CREATE OR REPLACE PROCEDURE PR_DAILYCHECK
(
p_Date IN DATE,
p_Office IN INTEGER,
p_Currency IN INTEGER,
P_Check IN INTEGER,
p_countNum OUT INTEGER)
IS
v_count INT;
BEGIN
v_count := 0;
IF p_Date IS NULL THEN
dbms_output.put_line('日期不能為空');
ELSE
IF P_Check = 1 THEN
insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance
where dtdate = p_Date);
select
count(sd.naccountid) into v_count
from sett_subaccount ss,sett_account sa,sett_dailytest sd
where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency
and rownum < 2;
COMMIT;
p_countNum := v_count;
dbms_output.put_line(p_countNum);
END IF;
IF P_Check = 2 THEN
insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance
where dtdate = p_Date);
select
count(sd.naccountid) into v_count
from sett_cfsubaccount ss,sett_account sa,sett_dailytest sd
where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency
and rownum < 2;
COMMIT;
p_countNum := v_count;
dbms_output.put_line(p_countNum);
END IF;
END IF;
END PR_DAILYCHECK;
需要?jiǎng)?chuàng)建一個(gè)臨時(shí)表,請舉例說明,謝謝!
---------------------------------------------------------------
是TEMPORARY
CREATE GLOBAL TEMPORARY TABLE flight_schedule (
startdate DATE,
enddate DATE,
cost NUMBER)
---------------------------------------------------------------
create proecdure name_pro
as
str varchar2(100);
begin
str:='CREATE GLOBAL TEMPORARY TABLE TABLENAME ON
COMMIT PRESERVE ROWS as select * from
others_table';
execute immediate str;
end;
/
可以把臨時(shí)表指定為事務(wù)相關(guān)(默認(rèn))或者是會(huì)話相關(guān):
ON COMMIT DELETE ROWS:指定臨時(shí)表是事務(wù)相關(guān)的,Oracle在每次提交后截?cái)啾怼?
ON COMMIT PRESERVE ROWS:指定臨時(shí)表是會(huì)話相關(guān)的,Oracle在會(huì)話中止后截?cái)啾怼?
=================
可以創(chuàng)建以下兩種臨時(shí)表:
1。會(huì)話特有的臨時(shí)表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT PRESERVE ROWS;
========
對全局臨時(shí)表的總結(jié)
在臨時(shí)表上的操作比在一般的表上的操作要快。因?yàn)椋?
1創(chuàng)建臨時(shí)表不需要往編目表中插入條目,臨時(shí)表的使用也不需要訪問編目表,因此也沒有對編目表的爭用。
2僅有創(chuàng)建臨時(shí)表的app才可存取臨時(shí)表,所以在處理臨時(shí)表時(shí)沒有鎖。
3如果指定NOT LOGGED選項(xiàng),在處理臨時(shí)表時(shí)不記日志。所以如果有僅在數(shù)據(jù)庫的一個(gè)會(huì)話中使用的大量臨時(shí)數(shù)據(jù),把這些數(shù)據(jù)存入臨時(shí)表能大大提高性能。
DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20));
在CONNECT RESET命令后,臨時(shí)表不再存在。
建臨時(shí)表是動(dòng)態(tài)編譯的,所以對臨時(shí)表的使用也必須放在DECLARE CURSER 后面
CREATE PROCEDURE INSTT2(P1 INT, P2 CHAR(20))
BEGIN
DECLARE GLOBAL TEMPORARY TABLE TT(C1 INT, C2 CHAR(20)) %
INSERT INTO SESSION.TT VALUES(P1, P2);
BEGIN
DECLARE C1 CURSOR WITH RETURN FOR SELECT * FROM SESSION.TT;
END;
END %
2。事務(wù)特有的臨時(shí)表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT DELETE ROWS;
在Oracle中,全局臨時(shí)表并不會(huì)刪除,實(shí)際上你只需要建立一次,以后直接應(yīng)用就行了,這與MS和Sybase不一樣。實(shí)際上在斷開數(shù)據(jù)庫連接時(shí),臨時(shí)
表中數(shù)據(jù)自動(dòng)清空,不同的Session之間是隔離的,不許要當(dāng)心相互影響,不過如果起用了連接共享的話,你要用On Commit
delete rows使數(shù)據(jù)僅在事物內(nèi)部有效。
3建立臨時(shí)表
臨時(shí)表的定義對所有會(huì)話SESSION都是可見的,但是表中的數(shù)據(jù)只對當(dāng)前的會(huì)話或者事務(wù)有效.
建立方法:
1) ON COMMIT DELETE ROWS 定義了建立事務(wù)級臨時(shí)表的方法.
CREATE GLOBAL TEMPORARY TABLE admin_work_area
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
EXAMPLE:
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area
2 (startdate DATE,
3 enddate DATE,
4 class CHAR(20))
5 ON COMMIT DELETE ROWS;
SQL> create table permernate( a number);
SQL> insert into admin_work_area values(sysdate,sysdate,'temperary table');
SQL> insert into permernate values(1);
SQL> commit;
SQL> select * from admin_work_area;
SQL> select * from permernate;
A
1
2)ON COMMIT PRESERVE ROWS 定義了創(chuàng)建會(huì)話級臨時(shí)表的方法.
CREATE GLOBAL TEMPORARY TABLE admin_work_area
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT PRESERVE ROWS;
EXAMPLE:
會(huì)話1:
SQL> drop table admin_work_area;
SQL> CREATE GLOBAL TEMPORARY TABLE admin_work_area
2 (startdate DATE,
3 enddate DATE,
4 class CHAR(20))
5 ON COMMIT PRESERVE ROWS;
SQL> insert into permernate values(2);
SQL> insert into admin_work_area values(sysdate,sysdate,'session temperary');
SQL> commit;
SQL> select * from permernate;
A
----------
1
2
SQL> select * from admin_work_area;
STARTDATE ENDDATE CLASS
---------- ---------- --------------------
17-1ÔÂ -03 17-1ÔÂ -03 session temperary
會(huì)話2:
SQL> select * from permernate;
A
----------
1
2
SQL> select * from admin_work_area;
未選擇行.
會(huì)話2看不見會(huì)話1中臨時(shí)表的數(shù)據(jù).
(increment 用與為long,short或者int類型生成唯一標(biāo)示。只有在沒有其他進(jìn)程忘同一張表中插入數(shù)據(jù)時(shí)才能使用。在集群下不要使用)