oracle-备份工具exp-imp
?
雖然是按照用戶的方式導(dǎo)出的,但導(dǎo)入之前,還是必須要有相同的用戶存在,刪除用戶以后,是無(wú)法進(jìn)行導(dǎo)入的
--重新創(chuàng)建回zlm用戶 SQL> create user zlm identified by zlm;
盡管zlm用戶的默認(rèn)表空間是USERS,但是用imp導(dǎo)入后的表還是會(huì)去找原來(lái)的表空間進(jìn)行恢復(fù),即“ZLM”,那么我們把原來(lái)的表空間也刪除掉,會(huì)怎么樣呢?
--刪除ZLM表空間后測(cè)試恢復(fù)情況 SQL> drop tablespace zlm including contents;
注意,使用including contents只是把可控制文件中相應(yīng)的信息刪除,物理上還是存在于OS的磁盤(pán)上的,如果要連同文件一起刪除,那么就要使用including contents and datafiles,那么就連渣渣也不剩了
當(dāng)我們把原來(lái)zlm用戶導(dǎo)出時(shí)的表空間ZLM刪除以后再倒入,此時(shí)會(huì)發(fā)現(xiàn)imp會(huì)把用戶導(dǎo)到數(shù)據(jù)庫(kù)缺省的USERS表空間上去,基于這種原理,當(dāng)我們做邏輯導(dǎo)入導(dǎo)出的時(shí)候,盡量保持源端與目標(biāo)端有相同的環(huán)境,當(dāng)然還包括字符集(這里沒(méi)有做測(cè)試)等。否則在導(dǎo)入數(shù)據(jù)后,可能會(huì)產(chǎn)生意外地狀況,比方說(shuō)源庫(kù)的表空間是很大的,但是由于在目標(biāo)庫(kù)中沒(méi)有創(chuàng)建相應(yīng)的表空間,默認(rèn)放到了USERS表空間中,環(huán)境和源庫(kù)產(chǎn)生了不同,可能導(dǎo)入的時(shí)候就直接報(bào)錯(cuò)了。當(dāng)然了,字符集更是一個(gè)要注意的問(wèn)題。
exp/imp通常在Oracle 8i/9i等早期的版本中用得較多,到了10g以后基本全面被數(shù)據(jù)庫(kù)泵(Data Pump)取代,即expdp/impdp,雖然說(shuō)已經(jīng)是過(guò)時(shí)的技術(shù),但作為DBA也不能完全不了解,因?yàn)楹蛿?shù)據(jù)泵還是有異曲同工之處的,只是數(shù)據(jù)泵的功能更強(qiáng)大了。本篇實(shí)驗(yàn)采用了一個(gè)最不實(shí)用的方法來(lái)演示exp/imp的使用方法,即:交互方式,該方式可支配的參數(shù)非常少,如,不能指定log,feedback等參數(shù),也不能指定按條件進(jìn)行導(dǎo)出,且每次使用起來(lái)都要一步步確認(rèn)非常多的步驟,非常繁瑣,不推薦使用,即便要使用,也推薦采用另外兩種方式:1.命令行模式、2.參數(shù)文件模式(推薦)。
?
先備份相關(guān)表
分為按用戶導(dǎo)與按表導(dǎo),
按表的話,需要指定表名。
備份內(nèi)容有:
一個(gè)表中所有的數(shù)據(jù)
一個(gè)表的數(shù)據(jù)與結(jié)構(gòu)
按用戶的話,該用戶下的所在模式對(duì)象都導(dǎo)出來(lái)了
exp help=y
exp hr/123456
回答幾個(gè)問(wèn)題
帶著問(wèn)題去學(xué)習(xí)!!!!到這里所產(chǎn)生的問(wèn)題
1.exp-00091:exporting questionable statistics.是什么東西
2.用exp導(dǎo)出所有的表如何做。上面的需要事先知道表名,然后一個(gè)一個(gè)導(dǎo)出。
經(jīng)baidu查詢,
問(wèn)題1解決辦法如下:
指定Linux系統(tǒng)的NLS_LANG環(huán)境變量為數(shù)據(jù)庫(kù)的字符集
1)查詢數(shù)據(jù)庫(kù)的字符集(方法很多只用一種)
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
2)設(shè)置Linux操作系統(tǒng)的NLS_LANG環(huán)境變量
[oracle@RH207 exp]$export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
Window系統(tǒng)的環(huán)境變量的修改方法是:
C:\>set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
這樣再次exp時(shí)就不會(huì)報(bào)EXP-00091: Exporting questionable statistics.錯(cuò)誤了
?
按用戶導(dǎo)
[oracle@db Downloads]$ expExport: Release 11.2.0.4.0 - Production on Sun Dec 18 12:50:18 2016Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.Username: lcpsys Password: Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Enter array fetch buffer size: 4096 > Export file: expdat.dmp > (1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > Export grants (yes/no): yes > Export table data (yes/no): yes > Compress extents (yes/no): yes > Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set--about to 即將,行將;剛要 About to export specified users ...
--指定要導(dǎo)出的用戶名 User to be exported: (RETURN to quit) > lcpsys --如果沒(méi)有其它的用戶名,直接回車(chē)退出配置模式,就開(kāi)始導(dǎo)了。 User to be exported: (RETURN to quit) > --開(kāi)始了 . exporting pre-schema procedural objects and actions . exporting foreign function library names for user LCPSYS . exporting PUBLIC type synonyms . exporting private type synonyms . exporting object type definitions for user LCPSYS About to export LCPSYS's objects ... . exporting database links . exporting sequence numbers . exporting cluster definitions . about to export LCPSYS's tables via Conventional Path ...
?
?
問(wèn)題2解決辦法如下:
具體命令參數(shù)可以參考
exp help=y
1、EXP:
????? 有三種主要的方式(完全、用戶、表)
????? 1、完全:
????????? EXP SYSTEM/123456 BUFFER=64000 FILE=full.dmp FULL=Y
????????? 如果要執(zhí)行完全導(dǎo)出,必須具有特殊的權(quán)限
????? 2、用戶模式:
????????? EXP hr/123456??? BUFFER=64000 FILE=hr.dmp OWNER=hr
????????? 這樣用戶hr的所有對(duì)象被輸出到文件中。
????? 3、表模式:
????????? EXP hr/123456??? BUFFER=64000 FILE=hr-xue.dmp TABLES=xue
????????? 這樣用戶hr的表xue就被導(dǎo)出
2、IMP:
????? 具有三種模式(完全、用戶、表)
????? 1、完全:
????????? IMP SYSTEM/123456 BUFFER=64000 FILE=full.dmp FULL=Y
????? 2、用戶模式:
????????? IMP hr/123456??? BUFFER=64000 FILE=hr.dmp FROMUSER=hr TOUSER=hr
????????? 這樣用戶hr的所有對(duì)象被導(dǎo)入到文件中。必須指定FROMUSER、TOUSER參數(shù),這樣才能導(dǎo)入數(shù)據(jù)。
????? 3、表模式:
????????? IMP hr/123456??? BUFFER=64000 FILE=hr-xue.dmp TABLES=xue
????????? 這樣用戶hr的表xue就被導(dǎo)入。有一個(gè)問(wèn)題是,如果表存在,數(shù)據(jù)不能導(dǎo)入,只需要在后面加入ignore=y參數(shù)就可以了
問(wèn)題的現(xiàn)象:
EXP-00026: conflicting modes specified
EXP-00000: Export terminated unsuccessfully ?
備份文件會(huì)生成 但是沒(méi)有內(nèi)容。
這個(gè)問(wèn)題主要是 exp的時(shí)候 里面參數(shù)發(fā)生了沖突。
?? 比較常見(jiàn)的:
1.同時(shí)指定了 owner? 和 tables
2.同時(shí)指定了 FULL 和tables
3.同時(shí)指定了多個(gè)owner和full
owner 表示導(dǎo)出整個(gè)用戶或者多個(gè)用戶? 而tables表示只導(dǎo)出其中的表 。
要么只導(dǎo)出其中的表? 要么導(dǎo)出整個(gè)用戶。不然就會(huì)沖突了、
增刪改相關(guān)行或表,再用備份的數(shù)據(jù)進(jìn)行恢復(fù)。
sqlplus hr/123456
set pagesize 200
set linesize 200
create table xue(id integer,name varchar(25));
insert into xue values(1,'wang');
insert into xue values(2,'liu');
commit;
將表刪除
drop table xue;
如果有索引關(guān)系的表,用下面
drop table mytest cascade constraints;
留下表結(jié)構(gòu),刪除一行或所有數(shù)據(jù)。
delete from regions where region_id=5;
delete from regions
imp hr/123456
回答幾個(gè)問(wèn)題
帶著問(wèn)題去學(xué)習(xí)!!!!到這里所產(chǎn)生的問(wèn)題
1.所要回答的問(wèn)題有些不清楚,需要細(xì)查一下。
2.字符集的問(wèn)題要處理一下。
經(jīng)baidu查詢,結(jié)果如下:
以上的這種方法算是一種邏輯備份,將數(shù)據(jù)導(dǎo)入到一個(gè)臨時(shí)的文件之中。
還可以物理備份的方法,即將oradata/下面的所有數(shù)據(jù)全部復(fù)制到另外一個(gè)安全的地方,也叫冷備
還可以熱備的方法。
ORACLE數(shù)據(jù)庫(kù)有兩類(lèi)備份方法。第一類(lèi)為物理備份,該方法實(shí)現(xiàn)數(shù)據(jù)庫(kù)的完整恢復(fù),但數(shù)據(jù)庫(kù)必須運(yùn)行在歸擋模式下(業(yè)務(wù)數(shù)據(jù)庫(kù)在非歸擋模式下運(yùn)行),且需要極大的外部存儲(chǔ)設(shè)備,例如磁帶庫(kù);第二類(lèi)備份方式為邏輯備份,業(yè)務(wù)數(shù)據(jù)庫(kù)采用此種方式,此方法不需要數(shù)據(jù)庫(kù)運(yùn)行在歸擋模式下,不但備份簡(jiǎn)單,而且可以不需要外部存儲(chǔ)設(shè)備。
數(shù)據(jù)庫(kù)邏輯備份方法
ORACLE數(shù)據(jù)庫(kù)的邏輯備份分為三種模式:表備份、用戶備份和完全備份。
表模式
備份某個(gè)用戶模式下指定的對(duì)象(表)。業(yè)務(wù)數(shù)據(jù)庫(kù)通常采用這種備份方式。
若備份到本地文件,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_csd_yyyymmdd.dmp
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
若直接備份到磁帶設(shè)備,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
注:在磁盤(pán)空間允許的情況下,應(yīng)先備份到本地服務(wù)器,然后再拷貝到磁帶。出于速度方面的考慮,盡量不要直接備份到磁帶設(shè)備。
用戶模式
備份某個(gè)用戶模式下的所有對(duì)象。業(yè)務(wù)數(shù)據(jù)庫(kù)通常采用這種備份方式。
若備份到本地文件,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=exp_icdmain_yyyymmdd.dmp
log=exp_icdmain_yyyymmdd.log
若直接備份到磁帶設(shè)備,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_yyyymmdd.log
注:如果磁盤(pán)有空間,建議備份到磁盤(pán),然后再拷貝到磁帶。如果數(shù)據(jù)庫(kù)數(shù)據(jù)量較小,可采用這種辦法備份。
??? 完全模式
1、 將數(shù)據(jù)庫(kù)TEST完全導(dǎo)出,用戶名system 密碼manager 導(dǎo)出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
? 2、 將數(shù)據(jù)庫(kù)中system用戶與sys用戶的表導(dǎo)出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3、 將數(shù)據(jù)庫(kù)中的表table1 、table2導(dǎo)出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4、 將數(shù)據(jù)庫(kù)中的表table1中的字段filed1以"00"打頭的數(shù)據(jù)導(dǎo)出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
上面是常用的導(dǎo)出,對(duì)于壓縮我不太在意,用winzip把dmp文件可以很好的壓縮。不過(guò)在上面命令后面 加上 compress=y 就可以了
刪除某用戶下的所有對(duì)象
Oracle刪除用戶下所有對(duì)象的方法未必人人都會(huì),下面就為您介紹兩種常用的Oracle刪除用戶下所有對(duì)象的方法,希望對(duì)您學(xué)習(xí)Oracle刪除用戶方面能有所幫助。
方法1:
drop user hr cascade;
?? ?要退出所有的hr用戶連接,才能正確執(zhí)行。
drop tablespace USERS INCLUDING CONTENTS;
?? ?不能刪除默認(rèn)永久表空間。
create user hr profile default identified by 123456 default tablespace USERS temporary tablespace TEMP account unlock;
--授權(quán)
grant dba to hr;
grant connect,resource to hr;
方法2:
寫(xiě)存儲(chǔ)過(guò)程實(shí)現(xiàn)
DECLARE
TYPE name_list IS TABLE OF VARCHAR2(40);
TYPE type_list IS TABLE OF VARCHAR2(20);
Tab_name name_list:=name_list();
Tab_type type_list:=type_list();
sql_str VARCHAR2(500);
BEGIN
sql_str := 'select uo.object_name,uo.object_type from user_objects uo where uo.object_type not in(''INDEX'',''LOB'') order by uo.object_type desc';
EXECUTE IMMEDIATE sql_str BULK COLLECT INTO tab_name,tab_type;
FOR i IN Tab_name.FIRST.. Tab_name.LAST LOOP
sql_str := 'DROP ' || Tab_type(i) || ' ' || Tab_name(i);
EXECUTE IMMEDIATE sql_str;
END LOOP;
END;
sqlplus hr/123456
drop table jobs cascade constraints;?? ?這樣直接刪除可能會(huì)有問(wèn)題。所以盡量用下面的步驟解決,因?yàn)榭戳艘院?#xff0c;沒(méi)有明白后續(xù)步驟。
drop table jobs
ORA-02449: unique/primary keys in table referenced by foreign keys
報(bào)錯(cuò),用下面的方法解決
1.檢查哪些表的外鍵引用了要?jiǎng)h除的表的唯一/主鍵.
select A.*
from user_constraints A, user_constraints B
where b.table_name = 'MYTEST'
and a.constraint_type = 'R'
and a.r_constraint_name = b.constraint_name;
2.生成所有引用要?jiǎng)h除表的外鍵的創(chuàng)建語(yǔ)句.
????? select 'select dbms_metadata.get_ddl(''REF_CONSTRAINT'',''' ||
????????? A.CONSTRAINT_NAME || ''') FROM DUAL;'
?????? from user_constraints A, user_constraints B
?????? WHERE b.table_name = 'JOBS'
??????? and a.constraint_type = 'R'
??????? and a.r_constraint_name = b.constraint_name;
select 'drop table '|| table_name ||' cascade constraints' sql1 from user_tables;
??? ?
3.執(zhí)行步驟2中產(chǎn)生的SQL語(yǔ)句,獲取外鍵定義.
????? set long 3000
????? set linesize 3000
????? set pagesize 300
????? 執(zhí)行步驟2產(chǎn)生的語(yǔ)句.
4.刪除表.
????? drop table mytest cascade constraints;
5.刪除并重建表.
6.建立因創(chuàng)建該表所刪除的外鍵約束.
????? 執(zhí)行步驟3中獲取到的sql語(yǔ)句.
7.檢查各外鍵是否得到恢復(fù),系統(tǒng)是否正常.
?
?
drop table emp purge;
purge recyclebin;
commit,事務(wù)與刪除表沒(méi)有關(guān)系,可以不用敲。
exp
沒(méi)有數(shù)據(jù)的表是不導(dǎo)出的。
在實(shí)際的備份操作中,exp與imp用不了,因?yàn)樵谄鋵?dǎo)出的過(guò)程中,必須保證其他用戶不更新數(shù)據(jù)。
數(shù)據(jù)庫(kù)的冷備份,嚴(yán)格稱(chēng)為歸檔備份。指的是數(shù)據(jù)庫(kù)要關(guān)閉服務(wù),所有的事務(wù)都需要提交。
備份如下內(nèi)容:oradata/目錄下的內(nèi)容
1.控制文件:通過(guò)v$controlfile數(shù)據(jù)字典找到
2.重做日志文件:通過(guò)v$logfile數(shù)據(jù)字典找到
3.數(shù)據(jù)文件:通過(guò)v$datafile數(shù)據(jù)字典找到
4.參數(shù)文件: 通過(guò)show parameter pfile找到
5.記錄好相關(guān)文件的路徑
6.關(guān)閉oracle服務(wù),但是這個(gè)關(guān)有個(gè)問(wèn)題,比如超市說(shuō)關(guān)門(mén),不是立馬就關(guān)的,有時(shí)能關(guān)一個(gè)小時(shí),在關(guān)閉其間還有少量的io.
?? ?shutdown immediate
7.復(fù)制出所有的相關(guān)文件
8.重新啟動(dòng)oracle服務(wù),多種方式
?? ?startup或者將計(jì)算機(jī)關(guān)機(jī)一下,再開(kāi)機(jī),再startup
?
總結(jié)
以上是生活随笔為你收集整理的oracle-备份工具exp-imp的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ASCLL码对照表02(可显示字符)
- 下一篇: [Leetcode][第17题][JAV