Oracle数据库的备份
這兩天要用oracle的數(shù)據(jù)備份,在網(wǎng)上找了找例子。給大家貼出來看看。
PS: 選擇數(shù)據(jù)庫中所有的表的SQL語句
SELECT * FROM DBA_TABLES WHERE OWNER=''(填用戶名);
------------------------------------------------------------------------------
一. 導出工具 exp
1. 它是操作系統(tǒng)下一個可執(zhí)行的文件 存放目錄/ORACLE_HOME/bin
?? exp導出工具將數(shù)據(jù)庫中數(shù)據(jù)備份壓縮成一個二進制系統(tǒng)文件.可以在不同OS間遷移
?
它有三種模式:
a.? 用戶模式: 導出用戶所有對象以及對象中的數(shù)據(jù);
b.? 表模式: 導出用戶所有表或者指定的表;
c.? 整個數(shù)據(jù)庫: 導出數(shù)據(jù)庫中所有對象。
2. 導出工具exp交互式命令行方式的使用的例子
$exp?test/test123@appdb
Enter array fetch buffer size: 4096 > 回車
Export file: expdat.dmp > e:\m.dmp? 生成導出的文件名?
(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 3
Export table data (yes/no): yes > 回車
Compress extents (yes/no): yes > 回車
Export done in ZHS16GBK character set and ZHS16GBK NCHAR character set
About to export specified tables via Conventional Path ...
Table(T) or Partition(T:P) to be exported: (RETURN to quit) > cmamenu? 要導出的表名
. . exporting table??????????????????????? CMAMENU?????? 4336 rows exported
Table(T) or Partition(T:P) to be exported: (RETURN to quit) >要導出的表名n
Table(T) or Partition(T:P) to be exported: (RETURN to quit) > 回車
Export terminated successfully without warnings.
3. 導出工具exp非交互式命令行方式的例子
$exp scott/tiger tables=emp,dept file=/directory/scott.dmp grants=y
說明:把scott用戶里兩個表emp,dept導出到文件/directory/scott.dmp
$exp scott/tiger tables=emp query=\"where job=\'salesman\' and sal\<1600\" file=/directory/scott2.dmp
說明:在exp里面加上導出emp的查詢條件job='salesman' and sal<1600
?
(但我個人很少這樣用,還是把滿足條件的記錄生成臨時表后,再exp會方便一些)
$exp parfile=username.par file=/directory1/username_1.dmp,/directory1/username_2.dmp filesize=2000M log=/directory2/username_exp.log
參數(shù)文件username.par內(nèi)容
userid=username/userpassword
buffer=8192000
compress=n
grants=y
說明:username.par為導出工具exp用的參數(shù)文件,里面具體參數(shù)可以根據(jù)需要去修改
???? filesize指定生成的二進制備份文件的最大字節(jié)數(shù)
?
(可用來解決某些OS下2G物理文件的限制及加快壓縮速度和方便刻歷史數(shù)據(jù)光盤等)
4. 命令參數(shù)說明
關(guān)鍵字 說明(默認)
---------------------------------------------------
USERID 用戶名/口令
FULL 導出整個文件 (N)
BUFFER 數(shù)據(jù)緩沖區(qū)的大小
OWNER 所有者用戶名列表
FILE 輸出文件 (EXPDAT.DMP)
TABLES 表名列表
COMPRESS 導入一個范圍 (Y)
RECORDLENGTH IO 記錄的長度
GRANTS 導出權(quán)限 (Y)
INCTYPE 增量導出類型
INDEXES 導出索引 (Y)
RECORD 跟蹤增量導出 (Y)
ROWS 導出數(shù)據(jù)行 (Y)
PARFILE 參數(shù)文件名
CONSTRAINTS 導出限制 (Y)
CONSISTENT 交叉表一致性
LOG 屏幕輸出的日志文件
STATISTICS 分析對象 (ESTIMATE)
DIRECT 直接路徑 (N)
TRIGGERS 導出觸發(fā)器 (Y)
FEEDBACK 顯示每 x 行 (0) 的進度
FILESIZE 各轉(zhuǎn)儲文件的最大尺寸
QUERY 選定導出表子集的子句
下列關(guān)鍵字僅用于可傳輸?shù)谋砜臻g
TRANSPORT_TABLESPACE 導出可傳輸?shù)谋砜臻g元數(shù)據(jù) (N)
TABLESPACES 將傳輸?shù)谋砜臻g列表
二.導入工具 imp
1. 它是操作系統(tǒng)下一個可執(zhí)行的文件 存放目錄/ORACLE_HOME/bin
imp導入工具將EXP形成的二進制系統(tǒng)文件導入到數(shù)據(jù)庫中.
?? 它有三種模式:
a.? 用戶模式: 導出用戶所有對象以及對象中的數(shù)據(jù);
b.? 表模式: 導出用戶所有表或者指定的表;
c.? 整個數(shù)據(jù)庫: 導出數(shù)據(jù)庫中所有對象。
?
只有擁有IMP_FULL_DATABASE和DBA權(quán)限的用戶才能做整個數(shù)據(jù)庫導入
?
imp步驟:
(1) create table? (2) insert data? (3) create index (4) create triggers,constraints
2.導入工具imp交互式命令行方式的例子
$ imp
Import: Release 8.1.6.0.0 - Production on 星期五 12月 7 17:01:08 2001
(c) Copyright 1999 Oracle Corporation.? All rights reserved.
用戶名:? test
口令:****
連接到: Oracle8i Enterprise Edition Release 8.1.6.0.0 - 64bit Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
導入文件: expdat.dmp> e:\m.dmp
輸入插入緩沖區(qū)大小(最小為 8192 ) 30720>
經(jīng)由常規(guī)路徑導出由EXPORT:V08.01.06創(chuàng)建的文件
警告: 此對象由 TEST 導出, 而不是當前用戶
已經(jīng)完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的導入
只列出導入文件的內(nèi)容(yes/no):no>
由于對象已存在, 忽略創(chuàng)建錯誤(yes/no):no> yes
導入權(quán)限(yes/no):yes>
導入表數(shù)據(jù)(yes/no):yes>
導入整個導出文件(yes/no):no> yes
. 正在將TEST的對象導入到 SCOTT
. . 正在導入表?????????????????????? "CMAMENU"?????? 4336行被導入
成功終止導入,但出現(xiàn)警告。
3.導入工具imp非交互式命令行方式的例子
$ imp system/manager fromuser=jones tables=(accts)?
$ imp system/manager fromuser=scott tables=(emp,dept)?
$ imp system/manager fromuser=scott touser=joe tables=emp?
$ imp scott/tiger file = expdat.dmp full=y?
$ imp scott/tiger file = /mnt1/t1.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=/oracle_backup/log/imp_scott.log
$ imp system/manager parfile=params.dat?
params.dat 內(nèi)容?
file=dba.dmp show=n ignore=n grants=y fromuser=scott tables=(dept,emp)
4.導入工具imp可能出現(xiàn)的問題
(1) 數(shù)據(jù)庫對象已經(jīng)存在
一般情況, 導入數(shù)據(jù)前應該徹底刪除目標數(shù)據(jù)下的表, 序列, 函數(shù)/過程,觸發(fā)器等;??
數(shù)據(jù)庫對象已經(jīng)存在, 按缺省的imp參數(shù), 則會導入失敗
如果用了參數(shù)ignore=y, 會把exp文件內(nèi)的數(shù)據(jù)內(nèi)容導入
如果表有唯一關(guān)鍵字的約束條件, 不合條件將不被導入
如果表沒有唯一關(guān)鍵字的約束條件, 將引起記錄重復
(2) 數(shù)據(jù)庫對象有主外鍵約束
不符合主外鍵約束時, 數(shù)據(jù)會導入失敗?
解決辦法: 先導入主表, 再導入依存表
disable目標導入對象的主外鍵約束, 導入數(shù)據(jù)后, 再enable它們
(3)? 權(quán)限不夠
如果要把A用戶的數(shù)據(jù)導入B用戶下, A用戶需要有imp_full_database權(quán)限
(4)? 導入大表( 大于80M ) 時, 存儲分配失敗
默認的EXP時, compress = Y, 也就是把所有的數(shù)據(jù)壓縮在一個數(shù)據(jù)塊上.
導入時, 如果不存在連續(xù)一個大數(shù)據(jù)塊, 則會導入失敗.
導出80M以上的大表時, 記得compress= N, 則不會引起這種錯誤.
(5) imp和exp使用的字符集不同
如果字符集不同, 導入會失敗, 可以改變unix環(huán)境變量或者NT注冊表里NLS_LANG相關(guān)信息.
導入完成后再改回來.
(6) imp和exp版本不能往上兼容
imp可以成功導入低版本exp生成的文件, 不能導入高版本exp生成的文件
根據(jù)情況我們可以用
$ imp?username/password@connect_string
說明: connect_string 是在/ORACLE_HOME/network/admin/tnsnames.ora
定義的本地或者遠端數(shù)據(jù)庫的名稱
5.命令參數(shù)說明
關(guān)鍵字 說明(默認)???
----------------------------------------------
USERID 用戶名/口令
FULL 導入整個文件 (N)
BUFFER 數(shù)據(jù)緩沖區(qū)大小
FROMUSER 所有人用戶名列表
FILE 輸入文件 (EXPDAT.DMP)
TOUSER 用戶名列表
SHOW 只列出文件內(nèi)容 (N)
TABLES 表名列表
IGNORE 忽略創(chuàng)建錯誤 (N)
RECORDLENGTH IO 記錄的長度
GRANTS 導入權(quán)限 (Y)
INCTYPE 增量導入類型
INDEXES 導入索引 (Y)
COMMIT 提交數(shù)組插入 (N)
ROWS 導入數(shù)據(jù)行 (Y)
PARFILE 參數(shù)文件名
LOG 屏幕輸出的日志文件
CONSTRAINTS 導入限制 (Y)
DESTROY 覆蓋表空間數(shù)據(jù)文件 (N)
INDEXFILE 將表/索引信息寫入指定的文件
SKIP_UNUSABLE_INDEXES 跳過不可用索引的維護 (N)
ANALYZE 執(zhí)行轉(zhuǎn)儲文件中的 ANALYZE 語句 (Y)
FEEDBACK 顯示每 x 行 (0) 的進度
TOID_NOVALIDATE 跳過指定類型 id 的校驗
FILESIZE 各轉(zhuǎn)儲文件的最大尺寸
RECALCULATE_STATISTICS 重新計算統(tǒng)計值 (N)
下列關(guān)鍵字僅用于可傳輸?shù)谋砜臻g
TRANSPORT_TABLESPACE 導入可傳輸?shù)谋砜臻g元數(shù)據(jù) (N)
TABLESPACES 將要傳輸?shù)綌?shù)據(jù)庫的表空間
DATAFILES 將要傳輸?shù)綌?shù)據(jù)庫的數(shù)據(jù)文件
TTS_OWNERS 擁有可傳輸表空間集中數(shù)據(jù)的用戶
三. unix下oracle數(shù)據(jù)庫定時備份腳本(按用戶備份)
以下命令可以用crontab方式每天夜里2點定時執(zhí)行,腳本最多分30個文件,每個文件大小最大1G的形式將數(shù)據(jù)庫導出,
如果數(shù)據(jù)庫數(shù)據(jù)量很大,多于30G,則會導出不成功,此時只需根據(jù)數(shù)據(jù)量大小調(diào)整變量num的值即可。該腳本將數(shù)據(jù)庫
導出后用gzip進行壓縮,然后保存到系統(tǒng)/data/expfiles,導出之前,會將前一天的備份移到/data/expfiles_bak,
此種備份方式可以保存最近兩天的數(shù)據(jù)備份。
outfile=`date +%Y%m%d_%H%M`
num=30
i=1
files=
if [ !? -d /data/expfiles ]; then
mkdir /data/expfiles
fi
if [ !? -d /data/expfiles_bak ]; then
mkdir /data/expfiles_bak
fi
dfile=`ls -1 /data/expfiles_bak/|awk '{if ( NR < 2 ) {print $1}}'`
prefix=`echo | awk '{print substr("'"${dfile}"'",1,13)}'`
rm -f /data/expfiles_bak/${prefix}*
dfile=`ls -1 /data/expfiles/|awk '{if ( NR < 2 ) {print $1}}'`
prefix=`echo | awk '{print substr("'"${dfile}"'",1,13)}'`
mv /data/expfiles/${prefix}* /data/expfiles_bak
while [ $i? -lt? $num ]
do
files=$files/data/expfiles/${outfile}_$i.dmp,
i=` expr $i + 1 `
done
files=$files/data/expfiles/${outfile}_$i.dmp
#echo $files
exp?userid=user/passwd@acct?FILE=$files filesize=1024M grants=N 2>>exp_rpt.log
gzip /data/expfiles/${outfile}*
轉(zhuǎn)載于:https://www.cnblogs.com/iammatthew/archive/2010/08/19/1803905.html
總結(jié)
以上是生活随笔為你收集整理的Oracle数据库的备份的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 挑染多少钱啊?
- 下一篇: MySQLdb安装的错误说明