Oracle 原理:逻辑备份和恢复
目錄
一、備份和恢復
二、Oracel環境中可能發生的故障類型
三、導入導出程序 exp/imp
四、exp/imp 和數據泵的區別
一、備份和恢復
在Oracle 要有備份才能恢復。Oracle備份分為物理備份和邏輯備份。物理備份,即備份物理文件,如數據文件、日志文件、控制文件、密碼文件等。邏輯備份:表、視圖、存儲過程、數據庫對象等。
二、Oracel環境中可能發生的故障類型
故障分為四種:語句故障,即SQL語句發生錯誤發生的故障,Oracle會自己發現語句故障;用戶進程故障,當用戶程序連接數據庫時客戶端發生故障,導致客戶端死機,用戶進程消失。此時Oracle中的PMON會自動把對應的服務進程給停止;實例故障,如Oracle服務端死機,內存崩潰,進程垮掉。此時需要重啟Oracle就可以恢復實例故障;介質故障,如硬盤壞掉導致數據文件損壞,此時需要聯系DBA進行人工處理恢復。
三、導入導出程序 exp/imp
導出,把數據庫中的對象變成二進制文件放在操作系統中;導入,把操作系統的二進制文件變回數據庫中載入。傳統的導入導出程序在客戶端中。在傳統數據遷移中,把數據庫A中的數據導出成數據文件(dmp,csv,tsv,excle,sql文件等),再把這數據文件放入新數據庫中執行。其中降低高水位線,可以重新導表來實現(一般是insert into newtable select * from oldtable; truncate table oldtable;insert into oldtable select * from newtable ;)
導入導出有四種模式:數據庫模式,導出導入數據庫全部對象;表空間模式,導入導出一個或多個表空間中的所有對象;用戶模式,導出導入一個用戶模式中的所有對象;表模式,導出導入一個或多個表或表分區。
導出exp的常用參數: 在cmd提示符中輸入 exp? help=y
| 參數名 | 默認值(格式) | 說明 |
| USERID | username/password@database?? | 指定要登陸用戶的賬號密碼,該參數必須為命令行中第一個參數,例: exp tester/ root指的是用戶名為tester,密碼是root |
| FULL | FULL=Y/N | 是否導出整個數據庫 |
| BUFFER | BUFFER=數據緩沖區大小 | 數據緩沖區大小,用于提高exp/imp速度,單位為字節,不能寫成buffer=1m的形式,應寫成字節為單位的參數,如buffer=1048576 |
| OWNER | OWNER=(user1, user2, …) | 將擁有者為user1,user2,…的表導出 |
| FILE | FILE=example.dmp | 指定導出文件的路徑和文件名,例:FILE=example.dmp是指將數據導出到example.dmp中 |
| TABLES | TABLES=(table1, table2,…) | 只導出表table1、table2… |
| COMPRESS | COMPRESS=Y/N | 是否對導出文件進行壓縮 |
| RECORDLENGTH | ? | IO記錄的長度 |
| GRANTS | GRANTS=Y/N | 是否導出權限 |
| INCTYPE | ? | 增量導出的類型 |
| INDEXES | INDEXES=Y/N | 是否導出索引 |
| RECORD | RECORD=Y/N | 是否追蹤增量導出 |
| DIRECT | DIRECT=Y/N | 是否是絕對路徑 |
| TRIGGERS | TRIGGERS=Y/N | 是否導出觸發器 |
| LOG | LOG=exp.log | 保存屏幕輸出的日志到某文件 |
| STATISTICS | STATISTICS=ESTIMATE | 分析對象 |
| ROWS | ROWS=Y/N | 是否導出表中數據行 |
| PARFILE | PARFILE=file_name | 參數文件,可將exp參數配置寫成文件,便于反復調用 |
| CONSISTENT | CONSISTENT=Y/N | 交叉表是否保持一致性 |
| CONSTRAINTS | CONSTRAINTS=Y/N | 是否導出約束 |
| OBJECT_CONSISTENT | ? | transaction set to read only during object export (N) |
| FEEDBACK | FEEDBACK=x | 每x行顯示運行進度 |
| FILESIZE | FILESIZE=size | 設置導出dmp文件的大小 |
| FLASHBACK_SCN | ? | SCN used to set session snapshot back to |
| FLASHBACK_TIME | ? | time used to get the SCN closest to the specified time |
| QUERY | QUERY=SQL | SQL語句用于數據過濾,例如:QUERY=' where id > 0'將id大于0的數據導出 |
| RESUMABLE | ? | suspend when a space related error is encountered(N) |
| RESUMABLE_NAME | ? | text string used to identify resumable statement |
| RESUMABLE_TIMEOUT | ? | wait time for RESUMABLE |
| TTS_FULL_CHECK | ? | perform full or partial dependency check for TTS |
| VOLSIZE | ? | number of bytes to write to each tape volume |
| TABLESPACES | TABLESPACES=(ts1, ts2) | 導出指定的表空間列表 |
| TRANSPORT_TABLESPACE | TRANSPORT_TABLESPACE=Y/N | 是否導出可傳輸的表空間元數據 |
| TEMPLATE | ? | template name which invokes iAS mode export |
imp導入常用參數:在cmd提示符中輸入 imp? help=y
| USERID | username/password | 指定要登陸用戶的賬號密碼,該參數必須為命令行中第一個參數,例: imp tester/ root指的是用戶名為tester,密碼是root |
| FULL | FULL=Y/N | 是否導入整個數據庫 |
| BUFFER | BUFFER=數據緩沖區大小 | 數據緩沖區大小 |
| FROMUSER | FROMUSER=(user1, user2, …) | 將擁有者為user1,user2,…的數據導入 |
| TOUSER | TOUSER=tester | 將數據導入到用戶tester下 |
| FILE | FILE=example.dmp | 指定導入文件的路徑和文件名,例:FILE=example.dmp是指導入example.dmp |
| TABLES | TABLES=(table1, table2,…) | 只導入表table1、table2… |
| SHOW | SHOW=Y/N | 只列出文件內容 |
| IGNORE | IGNORE=Y/N | 是否忽視遷移過程中的創建錯誤繼續導入 |
| RECORDLENGTH | ? | IO記錄的長度 |
| GRANTS | GRANTS=Y/N | 是否導出權限 |
| INCTYPE | ? | 增量導入類型 |
| INDEXES | INDEXES=Y/N | 是否導入索引 |
| COMMIT | COMMIT=Y/N | 是否提交數組插入 |
| ROWS | ROWS=Y/N | 是否導入數據行 |
| PARFILE | PARFILE=file_name | 參數文件,可將exp參數配置寫成文件,便于反復調用 |
| LOG | LOG=imp.log | 將屏幕輸出日志導入到指定文件 |
| CONSTRAINTS | CONSTRAINTS=Y/N | 是否導入約束 |
| DESTROY | DESTROY=Y/N | 是否覆蓋表空間數據文件 |
| INDEXFILE | ? | 將表/索引信息寫入指定的文件 |
| SKIP_UNUSABLE_INDEXES | SKIP_UNUSABLE_INDEXES=Y/N | 跳過不可用索引的維護 |
| FEEDBACK | FEEDBACK=x | 每 x 行顯示導入進度 |
| FILESIZE | FILESIZE=size | 設置導入dmp文件的大小 |
| TOID_NOVALIDATE | ? | 跳過指定類型 ID 的驗證 |
| STATISTICS | ? | import precomputed statistics (always) |
| RESUMABLE | RESUMABLE=Y/N | 在遇到有關空間的錯誤時掛起 |
| RESUMABLE_NAME | ? | text string used to identify resumable statement |
| RESUMABLE_TIMEOUT | ? | RESUMABLE 的等待時間 |
| COMPILE | COMPILE=Y/N | 是否編譯存儲過程, 包和函數 (Y) |
| STREAMS_CONFIGURATION | STREAMS_CONFIGURATION=Y/N | 是否導入streams的一般元數據 |
| STREAMS_INSTANTIATION | STREAMS_INSTANTIATION=Y/N | 是否導入streams的實例元數據 |
| DATA_ONLY | DATA_ONLY=Y/N | 是否只導入數據 |
| VOLSIZE | ? | number of bytes in file on each volume of a file on tape |
以上表格轉載于:https://blog.csdn.net/Loiterer_Y/article/details/84872058
例如導出,在命令提示符中
exp? <user>/<pwd>@<ROLE> tables=(<table1>,<table2>) file=<outputPah> log =<logPath> 例
exp system/voapd@orcl tables=(system.salary_tbl) file='D:\sal_bak.dmp' log='D:\sal_bak.log'
log如圖:
如果想導出用戶所有內容
exp system/voapd@orcl owner=system?file='D:\systemUser.dmp' log='D:\systemUser.log'.
當然有些參數不能同時使用? owner=? ?和 full=y? 等,因為這兩個參數不屬于同一個模式,不在同一個模式的參數是不能共用的,會造成沖突。
導出成dmp文件后,那就要導入imp
把D:\sal_bak.dmp 的備份表到給voapd 用戶
?imp system/voapd@orcl file=D:\sal_bak.dmp tables=(salary_tbl) fromuser=system touser=voapd
因為system的身份是DBA 所以可以導出給其他普通用戶,但是登陸普通用戶是無法給其他普通用戶導表的。
上述截圖有警告和語句執行失敗,是因為voapd 用戶 已經有salary_tbl 了。避免這樣的錯誤
?imp system/voapd@orcl file=D:\sal_bak.dmp tables=(salary_tbl) fromuser=system touser=voapd??IGNORE=Y? ? ?就行了
上面的導入導出方式是命令提示符的方式,還有一種是交互提示符方式,導入直接輸入imp , 導出直接輸入exp,然后一行一行地設值,不設值就是默認值
第三種導入導出的方式是參數文件的方式
執行導出參數文件。exp parfile='大大的.txt';
如果數據遷移量較大,可使用可傳輸表空間,具體步驟分為幾步:
1.檢查要傳輸的表空間是否是自包含的
2.將表空間設成只讀
3.exp進行可傳輸表空間的模式導出
4.將導出的文件和對應的數據文件復制到目標服務器上
5.進行imp可傳輸表空間的模式進行導入
6.目標數據庫上,把表空間設成讀寫狀態。
alter tablespace TESTTBS read only; create tablespace TESTTBS datafile 'D:\oracle\oradata\ORCL\TESTTBS2.DBF' size 10m; create table sal_tem tablespace TESTTBS as select * from salary_tbl; exp 'system/voapd@orcl as SYSDBA' tablespaces=TESTTBS transport_tablespace=Y file='D:\exp_tbl.dmp' --把表空間文件和對應的數據文件分別賦值到 目標服務器的 D:\exp_tbl.dmp 和 D:\oracle\oradata\voapl2\TESTTBS2.DBF imp 'system/voapd@voapl2 as SYSDBA' tablespaces=TESTTBS transport_tablespace=Y file='D:\oracle\exp_tbl.dmp' datafiles='D:\oracle\oradata\voapl2\TESTTBS2.DBF' alter tablespace TESTTBS read write;?
四、exp/imp 和數據泵的區別
? ? ?從10g開始Oracle有了數據泵的概念。exp/imp 的方法速度太慢,在大型的生產庫上十分明顯.exp/imp是客戶端的工具,而數據泵是服務器端的工具,能夠為Oracle 提高并行高速度的大數據遷移。使用數據泵(expdp/impdp)在服務器端使用,使用前需要在數據庫中創建一個Directory。
? ? ?在expdp進行導出時,Oracle首先會創建MT表,并把導出對象的信息插入到MT表,之后進行導出動作;導出完成后,MT表也導出到轉儲文件中;導出任務完成后,或者刪除了導出任務后,MT表自動刪除;如果導出任務異常終止,MT表仍然保留。expdp有四種模式,和剛才的exp的模式一樣。在cmd命令行中? expdp help=y? 查看參數幫助文檔。
數據泵導出實用程序提供了一種用于在 Oracle 數據庫之間傳輸
數據對象的機制。該實用程序可以使用以下命令進行調用:
? ?示例: expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
您可以控制導出的運行方式。具體方法是: 在 'expdp' 命令后輸入
各種參數。要指定各參數, 請使用關鍵字:
? ?格式: ?expdp KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
? ?示例: expdp scott/tiger DUMPFILE=scott.dmp DIRECTORY=dmpdir SCHEMAS=scott
? ? ? ? ? ? ? ?或 TABLES=(T1:P1,T1:P2), 如果 T1 是分區表
USERID 必須是命令行中的第一個參數。以下是可用關鍵字和它們的說明。方括號中列出的是默認值。
| ATTACH | 連接到現有作業。例如, ATTACH=job_name。 |
| COMPRESSION | 減少轉儲文件大小。有效的關鍵字值為: ALL, DATA_ONLY, [METADATA_ONLY] 和 NONE。 |
| CONTENT | 指定要卸載的數據。有效的關鍵字值為: [ALL], DATA_ONLY 和 METADATA_ONLY。 |
| DATA_OPTIONS | 數據層選項標記。有效的關鍵字值為: XML_CLOBS。 |
| DIRECTORY | 用于轉儲文件和日志文件的目錄對象。 |
| DUMPFILE | 指定目標轉儲文件名的列表 [expdat.dmp]。例如, DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。 |
| ENCRYPTION | 加密某個轉儲文件的一部分或全部。有效的關鍵字值為: ALL, DATA_ONLY, ENCRYPTED_COLUMNS_ONLY, METADATA_ONLY 和 NON。 |
| ENCRYPTION_ALGORITHM | 指定加密的方式。有效的關鍵字值為: [AES128], AES192 和 AES256。 |
| ENCRYPTION_MODE | 生成加密密鑰的方法。有效的關鍵字值為: DUAL, PASSWORD 和 [TRANSPARENT]。 |
| ENCRYPTION_PASSWORD | 用于在轉儲文件中創建加密數據的口令密鑰。 |
| ESTIMATE | 計算作業估計值。有效的關鍵字值為: [BLOCKS] 和 STATISTICS。 |
| ESTIMATE_ONLY | 計算作業估計值而不執行導出。 |
| EXCLUDE | 排除特定對象類型。例如, EXCLUDE=SCHEMA:"='HR'"。 |
| FILESIZE | 以字節為單位指定每個轉儲文件的大小。 |
| FLASHBACK_SCN | 用于重置會話快照的 SCN。 |
| FLASHBACK_TIME | 用于查找最接近的相應 SCN 值的時間。 |
| FULL | 導出整個數據庫 [N]。 |
| HELP | 顯示幫助消息 [N]。 |
| INCLUDE | 包括特定對象類型。例如, INCLUDE=TABLE_DATA。 |
| JOB_NAME | 要創建的導出作業的名稱。 |
| LOGFILE | 指定日志文件名 [export.log]。 |
| NETWORK_LINK | 源系統的遠程數據庫鏈接的名稱。 |
| NOLOGFILE | 不寫入日志文件 [N]。 |
| PARALLEL | 更改當前作業的活動 worker 的數量。 |
| PARFILE | 指定參數文件名。 |
| QUERY | 用于導出表的子集的謂詞子句。例如, QUERY=employees:"WHERE department_id > 10"。 |
| REMAP_DATA | 指定數據轉換函數。例如, REMAP_DATA=EMP.EMPNO:REMAPPKG.EMPNO。 |
| REUSE_DUMPFILES | 覆蓋目標轉儲文件 (如果文件存在) [N]。 |
| SAMPLE | 要導出的數據的百分比。 |
| SCHEMAS | 要導出的方案的列表 [登錄方案]。 |
| SOURCE_EDITION | 用于提取元數據的版本。 |
| STATUS | 監視作業狀態的頻率, 其中默認值 [0] 表示只要有新狀態可用, 就立即顯示新狀態。 |
| TABLES | 標識要導出的表的列表。例如, TABLES=HR.EMPLOYEES,SH.SALES:SALES_1995。 |
| TABLESPACES | 標識要導出的表空間的列表。 |
| TRANSPORTABLE | 指定是否可以使用可傳輸方法。有效的關鍵字值為: ALWAYS 和 [NEVER]。 |
| TRANSPORT_FULL_CHECK | 驗證所有表的存儲段 [N]。 |
| TRANSPORT_TABLESPACES | 要從中卸載元數據的表空間的列表。 |
| VERSION | 要導出的對象版本。有效的關鍵字值為: [COMPATIBLE], LATEST 或任何有效的數據庫版本。 |
下列命令在交互模式下有效。注: 允許使用縮寫。
?
| ADD_FILE | 將轉儲文件添加到轉儲文件集。 |
| CONTINUE_CLIENT | 返回到事件記錄模式。如果處于空閑狀態, 將重新啟動作業。 |
| EXIT_CLIENT | 退出客戶機會話并使作業保持運行狀態。 |
| FILESIZE | 用于后續 ADD_FILE 命令的默認文件大小 (字節)。 |
| HELP | 匯總交互命令。 |
| KILL_JOB | 分離并刪除作業。 |
| PARALLEL | 更改當前作業的活動 worker 的數量。 |
| REUSE_DUMPFILES | 覆蓋目標轉儲文件 (如果文件存在) [N]。 |
| START_JOB | 啟動或恢復當前作業。有效的關鍵字值為: SKIP_CURRENT。 |
| STATUS | 監視作業狀態的頻率, 其中默認值 [0] 表示只要有新狀態可用, 就立即顯示新狀態。 |
| STOP_JOB | 按順序關閉作業執行并退出客戶機。有效的關鍵字值為: IMMEDIATE。 |
?
impdp? help=y?
數據泵導入實用程序提供了一種用于在 Oracle 數據庫之間傳輸
數據對象的機制。該實用程序可以使用以下命令進行調用:
? ? ?示例: impdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
您可以控制導入的運行方式。具體方法是: 在 'impdp' 命令后輸入
各種參數。要指定各參數, 請使用關鍵字:
? ? ?格式: ?impdp KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
? ? ?示例: impdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
USERID 必須是命令行中的第一個參數。
以下是可用關鍵字和它們的說明。方括號中列出的是默認值。
| ATTACH | 連接到現有作業。例如, ATTACH=job_name。 |
| CONTENT | 指定要加載的數據。有效的關鍵字為: [ALL], DATA_ONLY 和 METADATA_ONLY。 |
| DATA_OPTIONS | 數據層選項標記。有效的關鍵字為: SKIP_CONSTRAINT_ERRORS。 |
| DIRECTORY | 用于轉儲文件, 日志文件和 SQL 文件的目錄對象。 |
| DUMPFILE | 要從中導入的轉儲文件的列表 [expdat.dmp]。例如, DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。 |
| ENCRYPTION_PASSWORD | 用于訪問轉儲文件中的加密數據的口令密鑰。對于網絡導入作業無效。 |
| ESTIMATE | 計算作業估計值。有效的關鍵字為: [BLOCKS] 和 STATISTICS。 |
| EXCLUDE | 排除特定對象類型。例如, EXCLUDE=SCHEMA:"='HR'"。 |
| FLASHBACK_SCN | 用于重置會話快照的 SCN。 |
| FLASHBACK_TIME | 用于查找最接近的相應 SCN 值的時間。 |
| FULL | 導入源中的所有對象 [Y]。 |
| HELP | 顯示幫助消息 [N]。 |
| INCLUDE | 包括特定對象類型。例如, INCLUDE=TABLE_DATA。 |
| JOB_NAME | 要創建的導入作業的名稱。 |
| LOGFILE | 日志文件名 [import.log]。 |
| NETWORK_LINK | 源系統的遠程數據庫鏈接的名稱。 |
| NOLOGFILE | 不寫入日志文件 [N]。 |
| PARALLEL | 更改當前作業的活動 worker 的數量。 |
| PARFILE | 指定參數文件。 |
| PARTITION_OPTIONS | 指定應如何轉換分區。有效的關鍵字為: DEPARTITION, MERGE 和 [NONE]。 |
| QUERY | 用于導入表的子集的謂詞子句。例如, QUERY=employees:"WHERE department_id > 10"。 |
| REMAP_DATA | 指定數據轉換函數。例如, REMAP_DATA=EMP.EMPNO:REMAPPKG.EMPNO。 |
| REMAP_DATAFILE | 在所有 DDL 語句中重新定義數據文件引用。 |
| REMAP_SCHEMA | 將一個方案中的對象加載到另一個方案。 |
| REMAP_TABLE | 將表名重新映射到另一個表。例如, REMAP_TABLE=EMP.EMPNO:REMAPPKG.EMPNO。 |
| REMAP_TABLESPACE | 將表空間對象重新映射到另一個表空間。 |
| REUSE_DATAFILES | 如果表空間已存在, 則將其初始化 [N]。 |
| SCHEMAS | 要導入的方案的列表。 |
| SKIP_UNUSABLE_INDEXES | 跳過設置為“索引不可用”狀態的索引。 |
| SOURCE_EDITION | 用于提取元數據的版本。 |
| SQLFILE | 將所有的 SQL DDL 寫入指定的文件。 |
| STATUS | 監視作業狀態的頻率, 其中默認值 [0] 表示只要有新狀態可用, 就立即顯示新狀態。 |
| STREAMS_CONFIGURATION | 啟用流元數據的加載 |
| TABLE_EXISTS_ACTION | 導入對象已存在時執行的操作。有效的關鍵字為: APPEND, REPLACE, [SKIP] 和 TRUNCATE。 |
| TABLES | 標識要導入的表的列表。例如, TABLES=HR.EMPLOYEES,SH.SALES:SALES_1995。 |
| TABLESPACES | 標識要導入的表空間的列表。 |
| TARGET_EDITION | 用于加載元數據的版本。 |
| TRANSFORM | 要應用于適用對象的元數據轉換。有效的關鍵字為: OID, PCTSPACE, SEGMENT_ATTRIBUTES 和 STORAGE。 |
| TRANSPORTABLE | 用于選擇可傳輸數據移動的選項。有效的關鍵字為: ALWAYS 和 [NEVER]。僅在 NETWORK_LINK 模式導入操作中有效。 |
| TRANSPORT_DATAFILES | 按可傳輸模式導入的數據文件的列表。 |
| TRANSPORT_FULL_CHECK | 驗證所有表的存儲段 [N]。 |
| TRANSPORT_TABLESPACES | 要從中加載元數據的表空間的列表。僅在 NETWORK_LINK 模式導入操作中有效。 |
| VERSION | 要導入的對象的版本。有效的關鍵字為: [COMPATIBLE], LATEST 或任何有效的數據庫版本。僅對 NETWORK_LINK 和 SQLFILE 有效。 |
| ? | ? |
下列命令在交互模式下有效。注: 允許使用縮寫。
| CONTINUE_CLIENT | 返回到事件記錄模式。如果處于空閑狀態, 將重新啟動作業。 |
| EXIT_CLIENT | 退出客戶機會話并使作業保持運行狀態。 |
| HELP | 匯總交互命令。 |
| KILL_JOB | 分離并刪除作業。 |
| PARALLEL | 更改當前作業的活動 worker 的數量。 |
| START_JOB | 啟動或恢復當前作業。有效的關鍵字為: SKIP_CURRENT。 |
| STATUS | 監視作業狀態的頻率, 其中默認值 [0] 表示只要有新狀態可用, 就立即顯示新狀態。 |
| STOP_JOB | 按順序關閉作業執行并退出客戶機。有效的關鍵字為: IMMEDIATE。 |
| ? | ? |
?
總結
以上是生活随笔為你收集整理的Oracle 原理:逻辑备份和恢复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle ORA-12526: TN
- 下一篇: Oracle 原理:数据装载 ,SQLl