一、 登錄 1.1 登錄預設資料庫 首先切換到oracle用戶,用資料庫預設管理員登錄。 [root@tsm-zh01 ~]# su – oracle [oracle@redhat ~]$ lsnrctl start #開啟監聽 [oracle@tsm-zh01 ~]$ sqlplus / as s ...
一、 登錄
1.1 登錄預設資料庫
首先切換到oracle用戶,用資料庫預設管理員登錄。
[root@tsm-zh01 ~]# su – oracle
[oracle@redhat ~]$ lsnrctl start #開啟監聽
[oracle@tsm-zh01 ~]$ sqlplus / as sysdba #sqlplus 用戶名/密碼
SQL> startup; #打開資料庫
1.2資料庫切換
1.2.1 Oracle實例進程顯示
[oracle@tsm-zh01 ~]$ ps -ef | grep ora_dbw0_$ORACLE_SID
oracle 5956 1 0 Sep21 ? 00:16:18 ora_dbw0_tsmdb1
oracle 5958 1 0 Sep21 ? 00:18:05 ora_dbw0_tsmcnnt1
oracle 5972 1 0 Sep21 ? 00:22:59 ora_dbw0_tsmcity1
1.2.2進行資料庫實例切換
在oracle用戶下輸入
export ORACLE_SID=實例名
1.2.3查看當前資料庫實例
SQL> select instance_name from v$instance;
INSTANCE_NAME
--------------------------------
tsmcity1
1.2.4查看所有啟動實例
[oracle@tsm-zh01 ~]$ ps -ef|grep smon #smon : system monitor
R1.2.5查看所有實例
未啟動的可以
ps -elf | grep ora_ ( 對比其後接的SID)
lsnrctl status
1.3開啟和關閉歸檔
1.3.1 查看當前歸檔模式
SQL> archive log list;Database log mode No Archive ModeAutomatic archival DisabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 228Current log sequence 230
1.3.2 關閉資料庫到mount
註意:
如果是資料庫集群,不能單獨用shutdown immediate;關閉資料庫,必須進入到grid用戶模式下用srvctl stop database -d 實例名 統一關閉實例;
另外startup mount和alter database archivelog;操作,每台集群都要操作,重啟資料庫的時候,直接在oracle用sqlplus按順序啟動。
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;ORACLE instance started. Total System Global Area 3423965184 bytesFixed Size 2180544 bytesVariable Size 2013268544 bytesDatabase Buffers 1392508928 bytesRedo Buffers 16007168 bytesDatabase mounted.
1.3.3 啟動或關閉歸檔
- 啟動歸檔
如果資料庫一開始沒有設置日誌模式,需要先設置日誌模式
Alter system set log_archive_start=true scope=spfile; 設置歸檔日誌方式為歸檔模式
SQL> alter database archivelog; Database altered.
- 設置歸檔路徑
alter system set log_archive_dest_1='location=/ora_arch';
- 關閉歸檔
SQL> alter database noarchivelog;Database altered.
- 關閉歸檔的時候可能會報閃回報錯,可以查一下閃回的狀態,關閉後可以正常關閉歸檔
ERROR at line 1:
ORA-38774: cannot disable media recovery - flashback database is enabled
- 關閉閃回
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
SQL> alter database flashback off;
Database altered.
1.3.4 重新啟動資料庫
查看資料庫實例狀態
select instance_name,status from v$instance;
INSTANCE_NAME STATUS
------------------------------------------------
linuxidc MOUNTED
SQL> alter database open;Database altered.
2.2 rman管理資料庫
2.2.1 在oracle下直接鏈接庫
[oracle@tsm-zh01 ~]$ export ORACLE_SID=orcl #如果本機有多個資料庫,先操作這個
[oracle@tsm-zh01 ~]$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Wed Dec 12 10:53:08 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: TSMCITY (DBID=2201482424)
RMAN>
2.2.2 進入rman後再連接庫
[oracle@tsm-zh01 ~]$ rman
Recovery Manager: Release 11.2.0.4.0 - Production on Wed Dec 12 10:53:25 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
RMAN> connect target /
connected to target database: TSMCITY (DBID=2201482424)
RMAN>
2.3 rman刪除歸檔日誌
公司所有的歸檔(tsmcnnt、tsmdb、tsmcity)都在tsmcity的歸檔文件夾黎。
2.3.1操作系統刪除(需要和資料庫同步)
在controlfile中記錄著每一個archivelog的相關信息當我們在OS下把這些物理文件delete掉或異常變動後,在controlfile中仍然記錄著這些archivelog的信息,當我們手工清除archive目錄下的文件後,這些記錄並沒有被我們從controlfile中清除掉,也就是oracle並不知道這些文件已經不存在了!這時候我們要做手工的清除。
1、物理刪除archivelog。在系統裡面找到歸檔日誌文件刪除。如果是陣列用grid用戶asmcmd命令進入到陣列刪除。
2、進入RMAN 。connect target / 沒有分號
3、crosscheck archivelog all; #查看歸檔日誌路徑檢查控制文件和實際物理文件的差別
4、delete expired archivelog all; 檢查控制文件和實際物理文件的差別
2.3.2 rman命令刪除
1、DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-30'; 刪除30天以前的所有歸檔,時間戳是以歸檔結束計算
2、delete force noprompt archivelog until time 'sysdate-2' ; 刪除2天前的歸檔(強制),force可選項;時間戳是以歸檔開始計算
在正常情況才用第一種情況進行刪除,如果採用第二種進行刪除可能會導致部分操作歸檔丟失。
3、其他刪除命令
RMAN>delete archivelog until sequence 123;
RMAN>delete archivelog all completed before 'sysdate - 7';
RMAN>delete archivelog all completed before 'sysdate - 1';
RMAN>delete archivelog from time 'sysdate-1';
2.4 集群管理
集群預設用grid 賬戶管理
lsnrctl status (在grid下使用,可以檢測oracle偵聽埠是否打開。)
[root@tsm-zh01 ~]# su - grid
[grid@tsm-zh01 ~]$ asmcmd
ASMCMD>
2.4.1單點集群停機:
有時候我們需要單獨關閉一個節點做維護, 那麼單獨關閉
在需要維護的節點Server 上,用root登錄:
輸入crsctl stop crs 或者 /etc/init.d/init.crs stop
[root@tsm-zh02 ~]# crsctl stop crs
…
CRS-2677: Stop of 'ora.gpnpd' on 'tsm-zh02' succeeded
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'tsm-zh02' has completed
CRS-4133: Oracle High Availability Services has been stopped.
[root@tsm-zh02 ~]crsctl start crs 重啟即可
2.4.2 RAC 數據遷移(ASM 磁碟組)
- 查看系統表狀態
SQL> select file_name,online_status,tablespace_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
ONLINE_STATUS TABLESPACE_NAME
-------------- ------------------------------------------------------------
+TSMCITY/tsmcity/datafile/users.290.855748279
ONLINE USERS
+TSMCITY/tsmcity/datafile/undotbs1.292.855748279
ONLINE UNDOTBS1
+TSMCITY/tsmcity/datafile/sysaux.272.855748279
ONLINE SYSAUX
- 關閉RAC上涉及的資料庫
srvctl stop database -d XXX
- 將RAC1啟動到mount狀態
如果用戶將原來的表空間建立在RAC1上,則在RAC1上進行操作;如果是RAC2,就到RAC2上進行操作
SQL>startup mount;
這一步非常重要,否則會提示找不到之前的數據表文件
- 通過rman 拷貝文件到磁碟組
如果用戶將原來的表空間建立在RAC1上,則在RAC1上進行操作;如果是RAC2,就到RAC2上進行操作
RMAN> connect target /
connected to target database: TSMCITY (DBID=2201482424)
RMAN> copy datafile '/home/oracle/test.dbf' to '+data';
Starting backup at 2017/09/17 02:13:03
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=36 instance=devdb1 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=/home/oracle/test.dbf
output file name=+DATA/devdb/datafile/users.273.954900787 tag=TAG20170917T021305 RECID=3 STAMP=954900786
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2017/09/17 02:13:07
Starting Control File and SPFILE Autobackup at 2017/09/17 02:13:07
piece handle=+FLASH/devdb/autobackup/2017_09_17/s_954900552.304.954900789 comment=NONE
Finished Control File and SPFILE Autobackup at 2017/09/17 02:13:10
- 拷貝完畢後更改文件名
SQL>alter database rename file '/home/oracle/test.dbf' to '+DATA/devdb/datafile/USERS.273.954900787';
- 啟動資料庫集群
srvctl start database -d XXX
如果是資料庫集群建議採用如上操作,在grid裡面啟動資料庫,採用如下單點操作也可以進行
#RAC1
SQL> alter database open;
Database altered.
SQL>
#RAC2
SQL> startup;
二、 用戶管理、表空間和授權
2.1 用戶管理
2.1.1 創建用戶
CREATE USER 用戶名 IDENTIFIED BY 密碼 PROFILE DEFAULT DEFAUL T TABLESPACE 表空間 ACCOUNT UNLOCK;
PROFILE DEFAULT:預設的用戶口令限制,比如密碼錯誤次數、密碼鎖定時間。
ACCOUNT UNLOCK:賬戶是否啟用或者鎖定,預設是啟用。
2.1.2 刪除用戶
DROP USER 用戶名 CASCADE;
若用戶擁有對象,則不能直接刪除,否則將返回一個錯誤值。指定關鍵字cascade,可刪除用戶所有的對象,然後再刪除用戶。
2.1.3 更改口令
ALTER USER 用戶名 IDENTIFIED BY 改變的口令;
2.1.4 查詢所有用戶
SELECT * FROM ALL_USERS;
2.2 表空間管理
2.2.1 創建表空間
CREATE TABLESPACE 表空間名 DATAFILE '/路徑/文件名.dbf' SIZE 50M
AUTOEXTEND ON NEXT 50M MAXSIZE 2048M
[PERMANENT | TEMPORARY] [EXTENT MANAGEMENT LOCAL | DICTIONARY];
AUTOEXTEND:自動增長,預設關閉 ;
NEXT:下次增長的空間;
MAXSIZE:最大增長空間;
[PERMANENT | TEMPORARY]: 永久或者臨時表空間,一般先創建臨時表空間再創建永久表空間
[EXTENT MANAGEMENT LOCAL | DICTIONARY]:管理方式,預設是本地管理;
2.2.2 指定用戶表空間
1、創建用戶並指定表空間:
CREATE USER 用戶名 IDENTIFIED BY 密碼 DEFAULT TABLESPACE 永久表空間名 TEMPORARY TABLESPACE 臨時表空間;
2、更改用戶表空間:
ALTER USER 用戶名 DEFAULT TABLESPACE 表空間名;
2.2.3 刪除表空間、數據文件
刪除表空間(先離線)
DROP TABLESPACE 表空間名字 INCLUDING CONTENTS AND DATAFILES;
刪除單個數據文件
ALTER TABLESPACE TEST_SPACE DROP
DATAFILE '/DATA/ORACLE/ORADATA/ORCL/TEST2.DBF'; #刪除文件
2.2.4修改表空間
1、增加文件:
ALTER TABLESPACE 表空間名ADD DATAFILE '/路徑/aaa.dbf' SIZE 1000M;
2、修改表空間數據文件尺寸
ALTER DATABASE 資料庫名 DATAFILE ‘/路徑/AA.DBF’ RESIZE 2048M;
3、表空間屬性
使表空間聯機|離線
ALTER TABLESPACE game ONLINE|OFFLINE;
使數據文件離線|連接
ALTER DATABASE DATAFILE ‘ssss’ OFFLINE|ONLINE;
使表空間只讀|讀寫
ALTER TABLESPACE game READ ONLY|WRITE;
2.2.5 表空間查詢
1、看表空間名稱和狀態
select tablespace_name,status from user_tablespaces;
2、查詢表空間使用情況
SET lines 2000
SET pagesize 2000
SELECT total.tablespace_name,
Round(total.mb, 2) AS total_mb,
Round(total.mb - free.mb, 2) AS used_mb,
Round(free.mb, 2) AS free_mb,
Round(( 1 - free.mb / total.mb ) * 100, 2)
|| '%' AS used_pct
FROM (SELECT tablespace_name,
Sum(bytes) / 1024 / 1024 AS mb
FROM dba_free_space
GROUP BY tablespace_name) free,
(SELECT tablespace_name,
Sum(user_bytes) / 1024 / 1024 AS mb
FROM dba_data_files
GROUP BY tablespace_name) total
WHERE free.tablespace_name = total.tablespace_name
ORDER BY tablespace_name;
3、查詢表空間的free space
select tablespace_name, count(*) AS extends,round(sum(bytes) / 1024 / 1024, 2) AS MB,sum(blocks) AS blocks from dba_free_space group BY tablespace_name;
4、查詢表空間的總容量
select tablespace_name, sum(bytes) / 1024 / 1024 as MB from dba_data_files group by tablespace_name;
5、查詢表空間使用率
SELECT total.tablespace_name,
Round(total.MB, 2) AS Total_MB,
Round(total.MB - free.MB, 2) AS Used_MB,
Round(( 1 - free.MB / total.MB ) * 100, 2)
|| '%' AS Used_Pct
FROM (SELECT tablespace_name,
Sum(bytes) / 1024 / 1024 AS MB
FROM dba_free_space
GROUP BY tablespace_name) free,
(SELECT tablespace_name,
Sum(bytes) / 1024 / 1024 AS MB
FROM dba_data_files
GROUP BY tablespace_name) total
WHERE free.tablespace_name = total.tablespace_name;
6、表空間數據文件
SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME,ROUND(BYTES/(1024*1024),0) TOTAL_SPACE FROM DBA_DATA_FILES ORDER BY TABLESPACE_NAME;
2.2.6 用戶授權
GRANT CONNECT,RESOURCE,DBA TO 用戶名;
REVOKE CONNECT,RESOURCE,DBA FROM 用戶名; #收回許可權
2.27 表空間備份和恢復
1、離線備份和恢復(冷備份)
Shutdown 資料庫後直接複製相關文件即可,如果需要恢復,停機後再複製到原來的路徑,然後開啟資料庫。
2、聯機備份和恢復(熱備份)
熱備份的前提是資料庫必須運行在歸檔模式下,而且必須備份的只有數據文件,控制文件、重做日誌文件、歸檔日誌文件都是靠物理冗餘來保護的。
由於數據文件處於備份狀態時重做日誌後臺進程要將這些文件的所有的變化數據塊寫到重做日誌文件中,這對重做日誌緩衝區和重做日誌文件的壓力都增大了,所以需要註意幾下加點:
- 重做日誌緩衝區和重做日誌文件適當增大
- 在聯機備份時,每次只備份一個表空間
- 在DML最少的時候做備份
- 設置資料庫日誌模式為歸檔模式
Alter system set log_archive _start=true scope=spfile;
上述參數在oracle 10g已經廢棄
Shutdown immediate;
Startup mount;
Alter database archive;
- 開啟資料庫
既然是聯機備份,資料庫肯定是要保持正常開啟狀態的。
Alter database open;
- 備份表空間
Alter tablespace 空間名 begin backup; 執行此命令後,用cp命令複製表空間文件即可(用oracle用戶拷貝,否則文件許可權不對,無法恢復)。
Alter tablespace 空間名 end backup;
select * from v$backup; 查看是否備份成功
- 重做日誌寫入
select group#,sequence#,status,archived from v$log; 查看當前重做日誌:
Alter system archive log current;
Alter system switch logfile;
重做日誌文件一般有3個,切換3次。
- 如果資料庫某個表空間出現問題,無法正常啟動資料庫,操作如下;
先將表空間提示的數據文件切換到離線狀態
Alter database datafile 10 offline drop; 數字10為系統提示的文件編號;
Select * from v$recover_file; 查詢是否為編號為10的文件報錯。
刪除並複製之前備份的文件到表空間文件位置。
Alter database open;
- 恢復
Recover datafile 10;
Alter datafile 10 online;
完畢。
三、 備份和恢復
3.1 熱備份
3.2 邏輯備份
- EXP和IMP是客戶端工具程式,它們既可以在客戶端使用,也可以在服務端使用。
- EXPDP和IMPDP是服務端的工具程式,他們只能在ORACLE服務端使用,不能在客戶端使用。即EXPDP導出的數據只能在服務端。
- IMP只適用於EXP導出的文件,不適用於EXPDP導出文件;IMPDP只適用於EXPDP導出的文件,而不適用於EXP導出文件
3.2.1 exp 和imp
3.2.2 expdp 和impdp
3.2.2.1 expdp 導出
expdp或impdp命令時,可暫不指出用戶名/密碼@實例名 as 身份,然後根據提示再輸入,如:
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
1、創建邏輯目錄.
該命令不會在操作系統創建真正的目錄,最好以oracle等管理員創建。
sql>create directory dpdata1 as '/test/dump';
查看管理理員目錄(同時查看操作系統是否存在,因為Oracle並不關心該目錄是否存在,如果不存在,則出錯)
sql>select * from dba_directories;
2、授權資料庫用戶許可權
給scott用戶賦予在指定目錄的操作許可權,最好以system等管理員賦予。
sql>grant read,write on directory dpdata1 to scott;
#Scott是資料庫用戶,如果用管理sys去操作,可以不用授權操作,以 \’sys/密碼@實例名 as sysdba\’ 的形式登錄即可。比如\’sys / as sysdba \’
3、導出數據
1)按用戶導
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1 logfile=expdpd.log version=10.2.0.4
#Schemas=用戶名,Logfile可以不指定,系統會自動生成
#version如果指定版本號:則可以再低版本中進行恢復保證相容性
2)並行進程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott_%U.dmp parallel=4 job_name=scott3
#註意:dumpfile 參數擁有一個通配符 %U,它指示文件將按需要創建,格式為scott_nn.dmp,其中nn 從 01 開始,然後按需要向上增加,上限為最大線程數。
Sql>show parameters cpu #查看cpu支持的線程數。
3)按表名導
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1
#預設導出的該用戶名下麵的表,如果需要導出其他用戶的表 tables=用戶名.表名
4)按查詢條件導
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20'
5)按表空間導
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example
6)導整個資料庫
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y
7)partfile
expdp partfile=expdp.txt
文本文件裡面可以寫腳本,命令
3.2.2.2 impdp 恢復
- 導到指定用戶下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott
#即使用戶不存在也可以導入數據,建議先建立用戶在導入數據。
2)改變表的owner
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system
#將表的所有者從scott變為system
3)導入表空間
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example
4)導入資料庫
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y
5)追加數據
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION
3.2.2.3並行操作(PARALLEL) 說明
您可以通過 PARALLEL 參數為導出使用一個以上的線程來顯著地加速作業。每個線程創建一個單獨的轉儲文件,因此參數 dumpfile 應當擁有和並行度一樣多的項目。您可以指定通配符作為文件名,而不是顯式地輸入各個文件名,例如:
expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export
註意:dumpfile 參數擁有一個通配符 %U,它指示文件將按需要創建,格式將為expCASES_nn.dmp,其中nn 從 01 開始,然後按需要向上增加。
在並行模式下,狀態屏幕將顯示四個工作進程。(在預設模式下,只有一個進程是可見的)所有的工作進程同步取出數據,併在狀態屏幕上顯示它們的進度。
分離訪問數據文件和轉儲目錄文件系統的輸入/輸出通道是很重要的。否則,與維護 Data Pump 作業相關的開銷可能超過並行線程的效益,並因此而降低性能。並行方式只有在表的數量多於並行值並且表很大時才是有效的。
3.3 冷備份(非歸檔模式)
拷貝相關的數據文件、歸檔日誌、重做日誌、控制文件即可,可以保持文件一致性。
connect tigger/sccot as sysdba;
shutdown immediate; #先關閉資料庫
cp d:/test*.dbf d:export #--cp 文件 目標文件夾 數據文件
cp d:/test*.ctl d:export #--控制文件
cp d:/test*.log d:export #--日誌文件
startup;
查看控制文件路徑
select status,name from v$controlfile;
查看數據文件路徑
select status,file_name from dba_data_files;
查看日誌文件
select group#,status,member from v$logfile;
3.4 RMAN備份和恢復
3.4.1聯機備份
1、開啟歸檔
Sql> alter database archivelog; #開啟歸檔
Sql>archive log list; #查看歸檔狀態
2、創建恢複目錄
一般情況恢複目錄是用另外一臺伺服器的資料庫來創建的,以保證當前伺服器宕機後,恢複目錄仍然可以使用。
2.1創建恢復用表空間
#Sqlplus 遠程用戶名/密碼@遠程資料庫名 ;
Sql>create tablespace 表空間名 datafile ‘路徑’ size 200m autoextend on next 50m maxsize 500m;
Sql>create user 用戶名 idendified by 密碼 default tablespace 表空間名; #創建用於管理恢複目錄表空間的用戶
Sql>grant connect,resource,recovery_catalog_owner to 用戶名; #授予用戶管理表空間的許可權
在恢復用表空間中創建恢複目錄
2.2創建遠程恢複目錄
rman
Rman>connect catalog 遠程用戶/密碼@遠程資料庫名; #用rman 連接到遠程資料庫
Rman>create catalog; #創建恢複目錄
#創建完恢複目錄後,在遠程資料庫中登錄用戶,可以查到多了很多數據表信息。
2.3 註冊需要備份的資料庫
#Rman target /; #用rman連接需要備份的資料庫
Rman >connect catalog 用戶名/密碼@遠程資料庫名;
Rman>register database; #註冊需要備份的資料庫到恢複目錄
註冊完畢後可以在恢複目錄看到資料庫的註冊信息
3、備份
3.1 rman參數說明
https://www.cnblogs.com/-abm/p/9261034.html
%c 備份片的拷貝數
%d 資料庫名稱
%D 位於該月中的第幾天 (DD)
%M 位於該年中的第幾月 (MM)
%F 一個基於DBID唯一的名稱,這個格式的形式為c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII為該資料庫的DBID,YYYYMMDD為
日期,QQ是一個1-256的序列
%n 資料庫名稱,向右填補到最大八個字元
%u 一個八個字元的名稱代表備份集與創建時間
%p 該備份集中的備份片號,從1開始到創建的文件數
%U 一個唯一的文件名,代表%u_%p_%c
%s 備份集的號
%t 備份集時間戳
%T 年月日格式(YYYYMMDD)
3.2 連接遠程恢複目錄
在rman連接到本地資料庫之後,必須再遠程連接恢複目錄,這樣才會將備份信息寫入到恢複目錄,否則仍然是nocatlog模式,所有信息值存入到控制文件中。
#rman target / catalog 用戶名/密碼@遠程資料庫名 #前半部分是登錄到本地,後半部分連接到遠程
#rman target /
Rman> connect catalog 遠程用戶名/密碼@遠程資料庫名;
3.3備份
Rman>backup as compressed backupset database plus archivelog delete all input;
#plus archivelog 備份的同時備份歸檔日誌,包括剛剛運行backup所生成的日誌
#delet all input 刪除所有已備份的的歸檔日誌
RMAN>configure channel device type disk format '/home/oracle/oradata/backup/data_%d_%M_%U';
#設置數據文件備份路徑
RMAN>configure controlfile autobackup format for device type disk to '/home/oracle/oradata/backup/ctl_%d_%M_%F';
#設置控制文件備份路徑
通道備份
run
{
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
backup database format '/home/oracle/oradata/backup/Data_%d_%M_%U'
plus archivelog format '/home/oracle/oradata/backup/log_%d_%M_%U';
sql ‘alter system archive log current’; #備份所有的歸檔日誌
release channel ch1;
release channel ch2;
}
報錯 operation disallowed: snapshot control file enqueue unavailable
錯誤信息
RMAN> backup current controlfile format '/tmp/xifenfei.ctl';
Starting backup at 10-JUN-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=628 instance=orcl1 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
waiting for snapshot control file enqueue
waiting for snapshot control file enqueue
waiting for snapshot control file enqueue
waiting for snapshot control file enqueue
waiting for snapshot control file enqueue
cannot make a snapshot control file
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 06/10/2015 16:03:10
ORA-00230: operation disallowed: snapshot control file enqueue unavailable
查看會話
SQL> SELECT s.SID, USERNAME AS "User", PROGRAM, MODULE,
2 ACTION, LOGON_TIME "Logon"
3 FROM V$SESSION s, V$ENQUEUE_LOCK l
4 WHERE l.SID = s.SID
5 AND l.TYPE = 'CF'
6 AND l.ID1 = 0
7 AND l.ID2 = 2;
SID User
---------- ------------------------------
PROGRAM
------------------------------------------------
MODULE
------------------------------------------------
ACTION Logon
-------------------------------- ------------
648 SYS
rman@db1 (TNS V1-V3)
backup full datafile
0000152 STARTED111 03-JUN-15
查詢並kill相關session
查詢資料庫SID
Sql>select saddr,sid,serial#,paddr,username,status from v$session where sid = 648 ;SADDR SID SERIAL# PADDR USERNAME STATUS---------------- ---------- ---------- ---------------- ------------------------------------------------------------ ----------------00000000849D3D48 648 319 000000008488C070 SYS ACTIVE
查詢系統SPID
SQL> select spid from v$process where addr in(select paddr from v$session where sid=648);
SPID
------------
40108238 #這個SPID對應的就是操作系統的進程號
殺死session
alter system kill session ‘648,319'; #兩個數字代表SID和SERIAL
殺死spid
SQL> !ps -ef|grep 40108238
oracle 39125244 65011720 0 15:59:27 pts/0 0:00 grep 40108238
oracle 40108238 1 0 Jun 03 - 1:18 oracleorcl1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
$kill -9 40108238
或者直接一步
sql>ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' IMMEDIATE/POST_TRANSACTION;
POST_TRANSACTION表示等待事務完成後斷開會話,IMMEDIATE表示中斷會話,
3.4.2恢復
1、查看備份信息
恢復的時候一定要先檢查備份文件,刪除失效(expired)備份,否則恢復會報錯。
Rman>Report obsolete ; #查看冗餘無效備份
Rman>Delete noprompt obsolete;
Rman>Crosscheck backup; #檢查備份信息
Rman>Delete noprompt expired backup; #刪除過期備份
Rman>delete noprompt backupset 41 #(BS Key的值) 刪除指定備份
Rman>delete noprompt backup; #刪除所有備份
2、非系統表空間dbf文件丟失
SQL> startup
…
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/usr/oracle/app/oradata/orcl/users01.dbf' #提示data file 4不能識別。
SQL> alter database datafile 4 offline;
SQL> alter database open;
RMAN> restore datafile 4; #恢複數據文件4
RMAN> recover datafile 4; #還原數據文件 4
SQL> alter database datafile 4 online;
3、系統表空間dbf文件丟失
系統表空間文件丟失時,無法啟動資料庫,不能夠到open狀態,所以跳過SQL> alter database open; 命令直接恢複數據塊最後再執行SQL> alter database open;
SQL> alter database datafile 4 offline;
Database altered.
Database altered.
RMAN> restore datafile 4; #恢複數據文件4
RMAN> recover datafile 4; #還原數據文件 4
SQL> alter database datafile 4 online;
Database altered.
SQL> alter database open; #open在最後執行
4、控制文件丟失,數據文件丟失
控制文件丟失後,資料庫只能啟動到nomount狀態
啟動資料庫到nomount狀態
SQL> startup nomount;
SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00205: error in identifying control file, check alert log for more info
在rman中恢復控制文件
[oracle@oracledb ~]$ rman target/
Recovery Manager: Release 11.2.0.1.0 - Production on Thu Jun 15 15:01:13 2017
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (not mounted)
RMAN> restore controlfile from '/home/oracle/oradata/backup/control/ctl_ORCL_06_15_c-1452257309-20170615-05'; #恢復控制文件
Starting restore at 15-JUN-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:16
output file name=/usr/oracle/app/oradata/orcl/control01.ctl
output file name=/usr/oracle/app/flash_recovery_area/orcl/control02.ctl
Finished restore at 15-JUN-17
啟動資料庫到mount狀態下
SQL> alter database mount;
恢複數據文件
RMAN> restore database;
RMAN> recover database;
SQL> alter database open resetlogs; #控制文件丟失後需要執行重設日誌文件
再進行一次全備份!!!
四、 日誌管理
4.1錯誤日誌查詢
1 通過命令查看錯誤日誌目錄:show parameter background_dump_dest
/usr/oracle/app/diag/rdbms/orcl/orcl/trace
col * format a20 設置每一列的寬度為20個字元; *也可以用具體的列名來代替
五、 常見錯誤
5.1 sysaux 表空間SM/AWR占用過大
1、首先查看sysaux中各個項目占的比重。
SM/AWR占據了23GB的空間。
SELECT occupant_name"Item",
round(space_usage_kbytes/1024/1024,3)"Space Used (GB)",
schema_name "Schema",
move_procedure "MoveProcedure"
FROM v$sysaux_occupants
ORDER BY 2 Desc;
2、查看快照,快照是存儲到sysaux表空間的
select snap_id, begin_interval_time from sys.dba_hist_snapshot order by snap_id;
select min(snap_id),max(snap_id) from dba_hist_snapshot;
3、刪除快照信息
exec dbms_workload_repository.drop_snapshot_range(49303,49323 );
4、查看快照保存時間和間隔
SELECT * FROM DBA_HIST_WR_CONTROL;
5、修改快照保存時間和間隔
修改為每隔1小時搜集一次,保存時間為7*24*60分鐘)
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(INTERVAL=>60, RETENTION=>7*24*60);6、回收空間
由於存在高水位線,dbms_workload_repository.drop_snapshot_range 操作實際上是執行delete操作,所在刪除完畢快照後,空間沒有被回收。回收表空間,降低HWM(high water mark)。
1、查看sysaux表和索引的前10占用情況,尾碼為PK的表示索引表
SELECT *
FROM (SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MB
FROM DBA_SEGMENTS
WHERE TABLESPACE_NAME = 'SYSAUX'
GROUP BY SEGMENT_NAME
ORDER BY 2 DESC)
WHERE ROWNUM < 10;
可以看到目前表空間還是很大的。
2、選擇shrink逐一釋放表空間 ,move也可以釋放表空間,但是要重建索引。可以線上操作
#開啟行轉移,在釋放空間的時候將行向表的前面移動,以便釋放空間
alter table WRH$_SEG_STAT enable row movement;
#shrink用於釋放空間,cascade表示將表的索引的空間一起釋放,以尾碼PK結尾的表示索引,釋放的時候去掉PK即可。
ALTER TABLE test SHRINK SPACE compact
alter table WRH$_SEG_STAT shrink space cascade;
#關閉行轉移
alter table WRH$_SEG_STAT disable row movement;
3、或者選擇move釋放空間,需要停機操作,因為此時是鎖表的,不能夠進行DML操作
alter table ** move partition **;
#如果是分區表的話,需要先查看分區,按照分區操作
select segment_name,partition_name,bytes/1024/1024/1024 gb from dba_segments where segment_name='WRH$_ACTIVE_SESSION_HISTORY';
#重建索引
alter index **_PK partion ** rebuild
此時再去查看總利用率,發現SM/AWR已經降低到5G了。
7、註意事項
由於快照刪除實際上是對錶進行delete操作,因此會產生大量的歸檔,如果磁碟空間不足,將會導致問題。