您好,登錄后才能下訂單哦!
IMP/EXP,數據泵,SQL*Loader ,rman
數據庫的邏輯備份和恢復:exp和imp
1.導庫:導出和導入整個數據庫
2.導表空間:導出和導入表空間
3.導表用戶:導出和導入用戶中所有對象
4.導表:導出和導入表或表分區
(1)commit=y 插入并提交,頻繁提交會影響數據庫效率。提交數據庫過大時可以添加。
(2)ignore=y/n 該參數表示忽略創建錯誤,并繼續執行。
(3)full=y 是否完全導入。
1.導出導入表
備份測試表:
create tables emp_test as select * from emp_test;
exp導出數據庫表:
exp scott/123456@orcl file=/oracle/bak_oracle/emp_test.dmp tables="emp_test"
按條件進行選擇性導出
exp scott/123456@10.1.1.10:1521/orcl file=/oracle/bak_oracle/emp_test.dmp tables="emp_test" query=\"where sal between '1000' and '2000'\" log=/oracle/bak_oracle/emp_test.log
用有權限用戶導出不同用戶的不同表
exp \'sys/syste as sysdba\' file=/oracle/bak_oracle/emp_test.dmp tables="scott.emp_test,test.tab_test"
注:oracle用戶登錄并且配置了TNSNAME可以直接scott/123456
不是本機備份scott/123456@10.1.1.10:1521/orcl
刪除測試表
drop table emp_test ;
參數purge
imp導入數據庫表:
查詢該用戶存放數據的缺省表空間:select username,default_tablespace from dba_users where username = 'SCOTT';
在特殊情況下有些用戶的數據需要放到特殊的表空間中,使用如下的命令進行修改。
修改該用戶存放數據的缺省表空間:alter user scott default tablespace XXX;
imp scott/123456 file=/oracle/bak_oracle/emp_test.dmp
用有權限用戶導出不同用戶的不同表導入到一個用戶表中
imp \'sys/system as sysdba\' file=/oracle/bak_oracle/emp_test.dmp fromuser=scott;
查詢表是否刪除和導入成功
select count(*) from emp_test;
2.導出導入用戶
導出一個用戶下面的數據
exp scott/123456 file=/oracle/bak_oracle/scott.dmp owner=scott;
刪除一個用戶
SQL> drop user scott cascade;
drop user scott cascade
*
ERROR at line 1:
ORA-01940: cannot drop a user that is currently connected
(1)查看是否有SQL語句在占用這張表
select sess.INST_ID, sess.machine,
sess.program, sess.sql_id,
sess.sid, sess.serial#,
sess.PROCESS
lo.oracle_username, lo.os_user_name,
lo.locked_mode,
ao.object_name, ao.object_type,
ao.status,
from gv$locked_object lo, dba_objects ao, gv$session sess
where ao.object_id = lo.object_id
and lo.session_id = sess.sid
and sess.username = 'SCOTT'
--殺掉進程 sid,serial#
alter system kill session'10,11562';
(2)查看是否有會話沒有結束
SQL> select username,sid,serial#,paddr,status from v$session where username='SCOTT';
USERNAME SID SERIAL# PADDR STATUS
SCOTT 1 281 000000008E51C510 KILLED
SCOTT 20 362 000000008E491150 INACTIVE
SCOTT 21 175 000000008E48D050 INACTIVE
SCOTT 28 169 000000008E51C510 KILLED
SQL> select PROGRAM from v$process where addr='000000008E490110';
PROGRAM
oracle@master.example.com
--殺掉進程 sid,serial#
alter system kill session '1,281';
alter system kill session '20,362';
alter system kill session '21,175';
alter system kill session '28,169';
SQL> drop user scott cascade;
User dropped.
導入一個用戶下面的數據
先授權(連接數據庫和DBA的權限)再導入(用戶SCOTT下面的所有表)
grant connect,resource to scott identified by 123456;
grant dba to scott;
imp scott/123456 file=/oracle/bak_oracle/scott.dmp full=y;
用有權限的用戶導入表給用戶
imp 'sys/system@10.1.1.10:1521/orcl as sysdba' file=/oracle/bak_oracle/scott.dmp fromuser=scott touser=scott
注:touser=可以給不同的用戶
3.導入導出表空間
---未完待續
需要備份的數據量大時建議選擇數據泵
數據庫的邏輯備份和恢復:expdp和impdp
數據泵只能在數據庫的服務器端使用
在服務器上面創建目錄,用于導入導出時存放數據
create directory DATA_BAK as '/oracle';
為目錄授權用戶讀和寫的權限
grant read,write on directory DATA_BAK to TEST;
查看目錄和擁有者、路徑
select * from dba_directories
expdp 用戶名/密碼@IP/網絡服務名 schemas=用戶名 directory=創建的目錄 dumpfile=數據表名.dmp logfile=數據表名.log
expdp test/test@10.1.1.10:1521/orcl schemas='TEST' directory='DATA_BAK' dumpfile=/oracle/xxx.dmp logfile=/oracle/xxx.log
schemas:用戶名,directory:創建的存放數據的目錄,dumpfile:將要導出的數據庫備份dmp文件,logfile:存放導出日志文件,compression:導出時對文件進行壓縮
用腳本文件導出數據庫文件:
[oracle@master oracle]$ cat aa.par
userid=" test/test"
#userid=" / as sysdba" 用dba導出
directory=DATA_BAK
dumpfile=emp_test2.dmp
logfile=emp_test2.log
#parallel=5
compression=all
#nologfile=no
schemas=test
job_name=emp_test2_expdp
使用命令調用:
nohup expdp parfile=aa.par &
用命令導出數據庫文件:
expdp test/test@10.1.1.10/orcl directory=DATA_BAK dumpfile=emp_test2.dmp logfile=emp_test2.log schemas=test
數據泵導入數據庫語句:
impdp test/test@10.1.1.10:1521/orcl REMAP_SCHEMA = test:test table_exists_action = replace directory=DATA_BAK dumpfile=emp_test2.dmp logfile=emp_test2.log
數據庫的批量導入:SQL*Loader
連接用戶
查看表結構
?
控制文件:
[oracle@master oracle]$ cat EMP_LOADERTEST2.ctl
LOAD DATA
INFILE '/oracle/EMP_LOADERTEST2.ctl '
TRUNCATE INTO TABLE EMP_LOADERTEST2
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(EMPNO,ENAME,JOB)
數據文件:
[oracle@master oracle]$ cat EMP_LOADERTEST2.dat
11,a1,1,11,22,33,44,55
11,a2,2,11,22,33,44,55
11,a3,2,11,22,33,44,55
11,a4,3,11,22,33,44,55
導入時,數據文件中的數據,需要和控制文件中相對應
需要導入的表中的字段類型需要一致
sqlldr test/test control=/oracle/EMP_LOADERTEST2.ctl data=EMP_LOADERTEST2.dat
產生了sqlldr的日志文件
查看日志文件中數據庫導入的情況
檢查表中是否有數據
擴展表空間
系統表空間會自動擴大,如果系統表空間莫名其妙的大
1.查詢審計功能是否開著,審計表內數據大影響的
查看審計功能是否打開
show parameter audit;
2.關閉審計功能命令
SQL> alter system set audit_sys_operations=FALSE scope=spfile;
System altered.
SQL> alter system set audit_trail=NONE scope=spfile;
System altered.
重啟數據庫生效
注:audit_sys_operations的參數設置:
none 禁用數據庫審計
os 啟用數據庫審計,并將數據庫審計記錄定向到操作系統審計記錄
db 啟用數據庫審計,并將數據庫所有審計記錄定向到數據庫的SYS.AUD$表
xml 啟用數據庫審計,并將所有記錄寫到XML格式的操作系統文件中。
xml,extended 啟用數據庫審計,輸出審計記錄的所有列,包括SqlText和SqlBind的值。
3.查詢統計信息是否過多
統計信息時間默認為31天,時間可以修改為10天或一周,過期的統計信息系統自動刪除
SQL> select dbms_stats.get_stats_history_retention from dual;
SQL> conn / as sysdba
Connected.
SQL> exec dbms_stats.alter_stats_history_retention(10);
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。