linux環(huán)境下如何對(duì)oracle數(shù)據(jù)庫(kù)進(jìn)行整庫(kù)備份
項(xiàng)目需求:把服務(wù)器A上的一個(gè)數(shù)據(jù)庫(kù)整庫(kù)備份到服務(wù)器B上
一、備份數(shù)據(jù)庫(kù)
1. 遠(yuǎn)程登錄到服務(wù)器A
2. 使用如下命令導(dǎo)出數(shù)據(jù)庫(kù):
exp ?用戶名/密碼@ip /home/database.dmp
二、傳輸文件
1. 遠(yuǎn)程登錄到服務(wù)器B
2. 使用如下命令將備份文件從服務(wù)器A傳送到服務(wù)器B上
scp remoteUser@remoteIp:remoteFile localPath
三、創(chuàng)建用戶和表空間
1. 切換到操作Oracle數(shù)據(jù)庫(kù)
su - oracle
切換成功會(huì)提示相關(guān)數(shù)據(jù)庫(kù)的實(shí)例。?
2. 切換到sqlplus操作
sqlplus "/as sysdba"
3. 創(chuàng)建臨時(shí)表空間
create temporary tablespace user_temp?
tempfile '/home/oracle/app/oracle/oradata/orcl/user_temp.dbf'
size 50m?
autoextend on?
next 50m maxsize 20480m?
extent management local;?
?
4. 創(chuàng)建數(shù)據(jù)表空間?
create tablespace user_data?
logging?
datafile '/home/oracle/app/oracle/oradata/orcl/user_data.dbf'
size 50m?
autoextend on?
next 50m maxsize 20480m?
extent management local;?
?
5. 創(chuàng)建用戶并指定表空間?
create user username identified by password ?
default tablespace user_data?
temporary tablespace user_temp;?
?
6. 給用戶授予權(quán)限?
grant connect,resource,dba to username;
修改表空間
?
7. 如果想修改用戶默認(rèn)表空間使用如下命令:
ALTER USER user名
DEFAULT TABLESPACE tablespace名;
8. 退出sqlplus
?? exit
四、導(dǎo)入數(shù)據(jù)庫(kù):
?imp 用戶名/密碼@ip file=/home/database.dmpbuffer=102400000 feedback=10000 ?full=y
?
到這里就完成了數(shù)據(jù)庫(kù)的恢復(fù)。
但是在導(dǎo)入的時(shí)候可能會(huì)出現(xiàn)如下問題:
一、導(dǎo)入dmp文件,報(bào) IMP-00013: only a DBA can import a file exported by another DBA 的問題,
這篇博客http://blog.itpub.net/28758644/viewspace-1063614/給了兩種解決方法:
1. 給導(dǎo)入用戶賦予dba 權(quán)限
SQL>grant sysdba to user;
SQL>grant imp_full_database to user;
?
2.使用普通用戶導(dǎo)出dmp 文件,(我遇到的情況是測(cè)試環(huán)境的用戶都有DBA權(quán)限,沒有權(quán)限r(nóng)evoke dba權(quán)限,導(dǎo)致dmp文件導(dǎo)出都具有DBA權(quán)限)
變通的方法是:在本地導(dǎo)入具有帶DBA權(quán)限的dmp 文件,然后再revoke DBA權(quán)限,最后導(dǎo)出的dmp 文件就不具有DBA權(quán)限,普通用戶也可以導(dǎo)入。
?
?
二、導(dǎo)入了大量的數(shù)據(jù)庫(kù)表后發(fā)現(xiàn)導(dǎo)入錯(cuò)了,怎么才能快速刪除大量數(shù)據(jù)庫(kù)表。
解決辦法可參照http://www.cnblogs.com/chshnan/archive/2012/02/07/2341694.html這篇博客給出的兩種方法
1、如果有刪除用戶的權(quán)限,則可以:
drop user user_name cascade;
加了cascade就可以把用戶連帶的數(shù)據(jù)全部刪掉。
刪除后再創(chuàng)建該用戶。
--創(chuàng)建管理員用戶
create user 用戶名 identified by 密碼 defaulttablespace space_data(表空間名稱) temporary tablespace space_temp(臨時(shí)表空間名稱);
--授權(quán)
grant connect,dba to 用戶名;
--修改限額
ALTER USER "用戶名"QUOTA UNLIMITED ON SPACE_DATA(表空間名稱);
--查看所有用戶對(duì)象
select uo.object_name,uo.object_type fromuser_objects uo where uo.object_type<>'LOB' order by uo.object_type desc
2、如果沒有刪除用戶的權(quán)限,則可以執(zhí)行:
select 'drop table '||table_name||';' fromcat where table_type='TABLE'
將會(huì)輸出一批刪除表的sql語句,這些SQL語句執(zhí)行一下就可以了。(需要有drop table的權(quán)限)