最近幾天由於項目需要搭建新的開發環境,需要處理數據。本來是很簡單的事情,但是由於數據庫需要使用在線環境的數據,變得有些麻煩,主要是以前一些數據庫的處理都是小數據量,一個命令很短就執行完畢了,而這次數據庫文件在200G左右,數據備份和恢復,以及備份文件的轉移都成了問題,因爲文件相對比較大了,在文件備份、轉移、恢復的時間就成倍的增長,不能再向以前一樣始終在本地客戶端操作了。
我將描述一下我自己的操作過程,和其中積累的經驗。
數據庫信息如下:
用戶: SYSTEM 密碼:ORACLE
用戶:TEST 密碼:ORACLE
SID:orcl
第一步數據庫的備份:
1、 數據導出:
exp的常用方法如下:
A、 將數據庫orcl完全導出,用戶名system 密碼oracle 導出到
/data/oracle/myoraclebak.dmp中。
命令如下:
exp system/oracle@orcl file=/data/oracle/myoraclebak.dmp full=y log=exp.log
B、 將數據庫中system用戶與test用戶的表導出
命令如下:
exp system/oracle@orcl file=/data/oracle/myoraclebak.dmp owner=(system,test) log=exp.log
C、 將數據庫中的表table1、table2導出
命令如下:
exp test/oracle@orcl file=/data/oracle/myoraclebak.dmp tables=(table1,table2) log=exp.log
D、 將數據庫中的表table1中的字段filed1以"00"打頭的數據導出
命令如下:
exp test/oracle@orcl file=/data/oracle/myoraclebak.dmp tables=(table1) query=" where filed1 like '00%'" log=exp.log
E、 將數據庫中test用戶的表導出到多個文件,要求單個文件大小不允許超過2000M
命令如下:
exp parfile=username.par file=/data/oracle/myoraclebak1.dmp, /data/oracle/myoraclebak2.dmp filesize=2000M log=exp.log
參數文件username.par內容
userid=test/oracle@orcl
buffer=8192000
compress=n
grants=y
說明:username.par爲導出工具exp用的參數文件,裏面具體參數可以根據需要去修改 filesize指定生成的二進制備份文件的最大字節數。
F、 增量導出
命令如下:
exp system/manager@svr_ora inctype=incremental file=d:/incremental.dmp
2、 我使用的命令如下:
more exp.sh
exp test/oracle@orcl file=/data/oracle/myoraclebak.dmp full=y log=exp.log
nohup ./exp sh &
進程運行時間24小時左右,最終myoraclebak.dmp文件大小32G左右。
第二步數據庫導入:
3、 數據的導入
A、 將myoraclebak.dmp 中的數據導入 neworcl數據庫中。
命令如下:
imp test/oracle@neworcl file=myoraclebak.dmp full=y ignore=y log=imp.log buffer=999999
在後面加上 ignore=y 是忽略警告錯誤。
B、 將myoraclebak.dmp中的表table1 導入
命令如下:
imp test/oracle@neworcl file= myoraclebak.dmp tables=(table1) ignore=y log=imp.log buffer=999999
C、 導入一個或一組指定用戶所屬的全部表、索引和其他對象
命令如下:
imp system/oracle@neworcl file=myoraclebak.dmp log=imp.log fromuser=(test1,testuser2)
D、 將一個用戶所屬的數據導入另一個用戶
命令如下:
imp system/oracle@neworcl file=myoraclebak.dmp log=imp.log fromuser=test touser=testuser2
E、 從多個文件導入
命令如下:
imp system/oracle@neworcl file=(myoraclebak1.dmp, myoraclebak2.dmp) log= imp.log, filesize=1G full=y
F、 增量導入
命令如下:
imp system/manager@client_data inctype=restore ignore=y full=y file=d:/incremental.dmp
4、 我使用的命令如下:
more imp.sh
imp test/oracle@orcl file=myoraclebak.dmp full=y ignore=y log=imp.log buffer=999999
nohup ./imp.sh &
進程運行時間10小時左右。導入完畢後,數據佔用空間200G左右
備註1:
1、給用戶增加導入數據權限的操作
第一,啓動sql*puls
第二,以system/manager登陸
第三,create user 用戶名 IDENTIFIED BY 密碼 (如果已經創建過用戶,這步可以省略)
第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSION TO 用戶名字
2、創建表空間腳本
--need change url :'/mnt/data/database/SBAP_CONF.DBF',size :2048M
CREATE TABLESPACE SBAP_CONF DATAFILE
'/mnt/data/database/SBAP_CONF.DBF' SIZE 2048M AUTOEXTEND ON NEXT 2048M MAXSIZE UNLIMITED
NOLOGGING
PERMANENT
EXTENT MANAGEMENT LOCAL
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK OFF;
執行過程如下:
[oracle@REHL-oracle ~]$ sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 20 06:57:31 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Enter user-name: /as sysdba
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> @/data/tablespace.sql
備註2:
DROP TABLE mytable
TRUNCATE TABLE (schema)table_name
Oracle10g 回收站及徹底刪除table : drop table xx purge
drop後的表被放在回收站(user_recyclebin)裏,而不是直接刪除掉。這樣,回收站裏的表信息就可以被恢復,或徹底清除。
1.通過查詢回收站user_recyclebin獲取被刪除的表信息,然後使用語句
flashback table <user_recyclebin.object_name or user_recyclebin.original_name> to before drop [rename to <new_table_name>];
將回收站裏的表恢復爲原名稱或指定新名稱,表中數據不會丟失。
若要徹底刪除表,則使用語句:drop table <table_name> purge;
2.清除回收站裏的信息
清除指定表:purge table <table_name>;
清除當前用戶的回收站:purge recyclebin;
清除所有用戶的回收站:purge dba_recyclebin;