ORACLE的備份和遷移

脫機冷備

冷備份發(fā)生在數(shù)據(jù)庫已經(jīng)正常關(guān)閉的情況下

拷貝文件,假如數(shù)據(jù)庫文件都在目錄A城榛,拷貝這些數(shù)據(jù)庫文件到其他目錄比如目錄B揪利,如果要恢復(fù),則也是在數(shù)據(jù)庫shutdown的狀態(tài)下狠持,把這些文件從目錄B拷回目錄A疟位,再startup數(shù)據(jù)庫

--找出所有的控制文件

SQL> select name from v$controlfile;

--找出所有的數(shù)據(jù)文件和臨時文件

SQL> select file_name from dba_data_files;

SQL> select file_name from dba_temp_files;

--找出所有的redo log文件

SQL> select MEMBER from v$logfile;

用戶管理的備份與恢復(fù)也稱OS物理備份,是指通過數(shù)據(jù)庫命令設(shè)置數(shù)據(jù)庫為備份狀態(tài)喘垂,然后用操作系統(tǒng)命令甜刻,拷貝需要備份或恢復(fù)的文件绍撞。生產(chǎn)環(huán)境中使用的場景并不多,主要見于archivelog模式下,在表空間或數(shù)據(jù)文件級的備份得院。如果是no archivelog傻铣,一旦日志被覆蓋,有備份文件也恢復(fù)不了祥绞。因為恢復(fù)的時候矾柜,要用到備份時刻開始的日志。

控制文件的備份格式

SQL> alter database backup controlfile to '/home/oracle/notrace.ctl';

SQL> alter database backup controlfile to trace as '/home/oracle/trace.ctl';

[oracle@ocp]$ ll /home/oracle |grep ctl

-rw-r-----. 1 oracle dba 9748480 8月? 9 14:14 notrace.ctl

-rw-r--r--. 1 oracle dba? ? 5886 8月? 9 14:14 trace.ctl

backup controlfile to 'XX'? ? ? ? ? 此XX和實際的控制文件格式一樣就谜,二進制文件怪蔑,vi打開亂碼

backup controlfile to trace as 'XX'? 此XX類似重建控制文件中的內(nèi)容,文本文件丧荐,可以vi打開

重建控制文件的官方文檔

https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_5003.htm#SQLRF01203

SQL> shutdown immediate;

SQL> ! rm -f /u01/app/oracle/oradata/ocp/control0*.ctl

SQL> ! ls /u01/app/oracle/oradata/ocp/ |grep control

SQL>startup

CREATE CONTROLFILE REUSE DATABASE "ocp" NORESETLOGS NOARCHIVELOG

? ? MAXLOGFILES 32

? ? MAXLOGMEMBERS 2

? ? MAXDATAFILES 32

? ? MAXINSTANCES 1

? ? MAXLOGHISTORY 449

LOGFILE

? GROUP 1 '/u01/app/oracle/oradata/ocp/redo01.log',

? GROUP 2 '/u01/app/oracle/oradata/ocp/redo02.log',

? GROUP 3 '/u01/app/oracle/oradata/ocp/redo03.log'

DATAFILE

? '/u01/app/oracle/oradata/ocp/users01.dbf',

? '/u01/app/oracle/oradata/ocp/undotbs01.dbf',

? '/u01/app/oracle/oradata/ocp/sysaux01.dbf',

? '/u01/app/oracle/oradata/ocp/system01.dbf',

? '/u01/app/oracle/oradata/ocp/example01.dbf'

CHARACTER SET AL32UTF8;

SQL> ! ls /u01/app/oracle/oradata/ocp/ |grep control

control01.ctl

control02.ctl

control03.ctl

SQL> alter database open;

SQL> alter tablespace TEMP add tempfile '/u01/app/oracle/oradata/ocp/temp01.dbf' size 100M reuse;

2.所有控制文件丟失

SQL>recover database using backup controlfile;

會自動帶出Specify log: {=suggested | filename | AUTO | CANCEL}信息

--filename表示recover需要使用到的歸檔日志或在線日志

--AUTO表示自動使用數(shù)據(jù)庫推薦的歸檔日志或在線日志

--輸入了錯誤歸檔日志或在線日志會報錯缆瓣,但是不影響繼續(xù)恢復(fù),可以繼續(xù)輸入recover database using backup controlfile;繼續(xù)選擇正確的日志進行恢復(fù)

SQL> alter database open RESETLOGS;

因為虹统,控制文件不是最新的弓坞,打開到mount狀態(tài)后,這時可以查尋select * from v$log车荔,但是v$log.status和v$log.SEQUENCE#不一定是準確的(控制文件中當前在線日志序列號還是陳舊的,是當初備份時的渡冻,而控制文件備份后online redo log可能進行了多次切換),若按常規(guī)方式打開忧便,會報錯族吻,所以只要是控制文件是恢復(fù)或重建過來的,oracle一律采用RESETLOGS重設(shè)日志功能珠增,日志序列號從1重新開超歌。

3.修改數(shù)據(jù)庫結(jié)構(gòu)后丟失所有控制文件

--必須執(zhí)行兩次SQL> recover database using backup controlfile;

第一次:把新增的數(shù)據(jù)文件信息寫入控制文件,雖然寫入了控制文件蒂教,但是數(shù)據(jù)文件的名稱是不對的?

第二次:真正的恢復(fù)

alter database create datafile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00008' as '/u01/app/oracle/oradata/orcl/t1.dbf';

可以寫成下面的

alter database rename file '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00008' to '/u01/app/oracle/oradata/orcl/t1.dbf';

4.修改數(shù)據(jù)庫后脫機或者只讀表空間巍举,丟失所有控制文件

--此案例實驗有誤,需要重命名數(shù)據(jù)文件后再執(zhí)行一次SQL> recover database using backup controlfile;

--使用alter database backup controlfile to trace as的重建控制文件

--不需要執(zhí)行兩次SQL> recover database using backup controlfile;

是因為重建控制文件里面已經(jīng)有了一次recover database using backup controlfile凝垛,已經(jīng)把新增的數(shù)據(jù)文件信息寫入控制文件

(二)懊悯、丟失日志文件或日志文件組

--只有V$LOG.STATUS=INACTIVE和UNUSED的日志組才可以使用clear來恢復(fù)

--active和current的都不行,如果active和current的丟失梦皮,那么只能整個數(shù)據(jù)庫執(zhí)行恢復(fù)炭分,并且是不完全恢復(fù)

V$LOG.STATUS=ACTIVE

最近一次的完全檢查點SCN小于該日志中最后一條重做記錄的SCN,說明完全檢查點還沒有越過這個在線日志

說明此redo log中的數(shù)據(jù)沒有全部寫入了數(shù)據(jù)文件和控制文件

V$LOG.STATUS=INACTIVE

最近一次的完全檢查點SCN大于該日志中最后一條重做記錄的SCN,說明完全檢查點已經(jīng)越過這個在線日志

說明此redo log中的數(shù)據(jù)全部寫入了數(shù)據(jù)文件和控制文件

1.丟失系統(tǒng)表空間

--本實驗中還是使用了備份文件,現(xiàn)實情況中届氢,如果沒有任何備份欠窒,丟失系統(tǒng)表空間,基本無望。

//關(guān)閉數(shù)據(jù)庫備份system 表空間的數(shù)據(jù)文件

[oracle@oracle ~]cp ..

不能參考非系統(tǒng)表空間對數(shù)據(jù)文件脫機方式打開數(shù)據(jù)庫岖妄,是因為系統(tǒng)表空間和對應(yīng)數(shù)據(jù)文件不能offline

SQL> alter tablespace system offline;

alter tablespace system offline

ERROR at line 1:

ORA-01541: system tablespace cannot be brought offline; shut down if necessary

SQL> alter database datafile '/u01/app/oracle/oradata/orcl/system01.dbf' OFFLINE DROP;

alter database datafile '/u01/app/oracle/oradata/orcl/system01.dbf' OFFLINE DROP

ERROR at line 1:

ORA-01541: system tablespace cannot be brought offline; shut down if necessary

2.丟失非系統(tǒng)表空間

非系統(tǒng)表空間的數(shù)據(jù)文件丟失型将,可以使用數(shù)據(jù)文件脫機的方式來打開數(shù)據(jù)庫

EXP遷移表空間:快的原因是因為,只是導(dǎo)出了元數(shù)據(jù)荐虐,實際數(shù)據(jù)文件是從源庫拷貝到了目標庫

目標端:DBCA建立一個orcl的數(shù)據(jù)庫

源表空間test的信息

SQL>create tablespace test datafile '/u01/app/oracle/oradata/ocp/test.dbf' size 10M;

SQL>create user test identified by oracle default tablespace test;

SQL>grant dba to test;

SQL>conn test/oracle

SQL>create table test1 as select * from dba_users;

SQL>create table test2 as select * from dba_data_files;

以下是表空間遷移的操作步驟七兜,1-4步操作在源數(shù)據(jù)庫中操作,5福扬、6腕铸、7步在目的數(shù)據(jù)庫操作。

1. 用as sysdba的權(quán)限登錄ORACLE铛碑。檢查源表空間test是否自包含狠裹,并設(shè)置源表空間置為READ ONLY,使得表空間下的數(shù)據(jù)文件置為READ ONLY狀態(tài)汽烦,可以進行操作系統(tǒng)級的拷貝涛菠。--如果是生產(chǎn)系統(tǒng)請注意選擇好進行此操作的時間。

SQL> exec sys.dbms_tts.transport_set_check('TEST',true);

SQL> select * from sys.transport_set_violations;--沒有結(jié)果表示自包含

SQL>ALTER TABLESPACE test READ ONLY;

2. 利用EXP工具進行數(shù)據(jù)庫表空間的遷移撇吞,需要as sysdba權(quán)限

exp \'system/oracle as sysdba\' file=/home/oracle/test2018.dmp transport_tablespace=y tablespaces=test

3. 將待遷移的表空間下的所有數(shù)據(jù)文件進行操作系統(tǒng)級的拷貝俗冻,復(fù)制到目的數(shù)據(jù)庫orcl1的目錄下,比如拷貝后名稱為/u01/app/oracle/oradata/orcl/test999.dbf。

4. 將源tablsspace_name表空間置為READ WRITE牍颈,使得表空間下的數(shù)據(jù)文件置為READ WRITE狀態(tài)

SQL> select tablespace_name,status from dba_tablespaces;

SQL>ALTER TABLESPACE test READ WRITE;

SQL> select tablespace_name,status from dba_tablespaces;

5.? 在目的數(shù)據(jù)庫上建立相應(yīng)的用戶user_name并賦權(quán)限,不要建立要傳輸?shù)谋砜臻g

ORACLE_SID=orcl

sqlplus / as sysdba

SQL> select tablespace_name,status from dba_tablespaces;--沒有test表空間

SQL>create user test identified by oracle;

SQL>grant dba to test;

SQL>select count(*) from test.test1 union all select count(*) from test.test2;--沒有這兩張表

6.? 在目的數(shù)據(jù)庫上利用IMP工具進行數(shù)據(jù)庫表空間的遷移

imp \'system/oracle as sysdba\' FILE=/home/oracle/test2018.dmp TRANSPORT_TABLESPACE=Y TABLESPACES=test DATAFILES=/u01/app/oracle/oradata/orcl/test999.dbf

7.? 在目的數(shù)據(jù)庫上將目的tablsspace_name表空間置為READ WRITE迄薄,使得表空間下的數(shù)據(jù)文件置為READ WRITE狀態(tài)

SQL> select tablespace_name,status from dba_tablespaces;--有了test表空間

SQL>ALTER TABLESPACE test READ WRITE;

SQL>select count(*) from test.test1 union all select count(*) from test.test2;--有了這兩張表

--以上如果是異機操作,則把exp的導(dǎo)出文件/home/oracle/test2018.dmp和test表空間下所有數(shù)據(jù)文件都要拷貝到異機

EXPDP

SQL文件:描述指定作業(yè)所包含對象的若干DDL語句,對應(yīng)impdp中參數(shù)sqlfile煮岁,加上sqlfile參數(shù)后讥蔽,就不是真正的導(dǎo)入,而是生成導(dǎo)入對象的ddl語句

轉(zhuǎn)儲文件:即包含數(shù)據(jù)和元數(shù)據(jù)的文件,對應(yīng)expdp中參數(shù)dumpfile

日志文件:用于記錄導(dǎo)出時的相關(guān)信息,對應(yīng)expdp人乓、impdp中參數(shù)logfile

expdp遷移表空間的官方文檔

https://docs.oracle.com/cd/E11882_01/server.112/e25494/tspaces.htm#ADMIN11394

EXP可以在read only模式下操作

EXPDP不可以在read only模式下操作

EXPDP導(dǎo)出過程中會建立一個JOB且會產(chǎn)生一張表SYS_EXPORT_SCHEMA_01勤篮,導(dǎo)完后又會自動刪除,所以EXPDP無法在read only模式下操作

SQL> startup mount;

ORACLE instance started.

Total System Global Area 1272213504 bytes

Fixed Size? ? ? ? ? ? ? ? ? 1344680 bytes

Variable Size? ? ? ? ? ? 838863704 bytes

Database Buffers? ? ? ? ? 419430400 bytes

Redo Buffers? ? ? ? ? ? ? 12574720 bytes

Database mounted.

SQL> alter database open read only;

Database altered.

SQL> exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

[oracle@ocp oradata]$exp system/oracle file=/home/oracle/exptable.dat log=/home/oracle/exptable21.log tables=hr.employees

About to export specified tables via Conventional Path ...

Current user changed to HR

. . exporting table? ? ? ? ? ? ? ? ? ? ? EMPLOYEES? ? ? ? 107 rows exported

[oracle@ocp oradata]$expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdptable.dat logfile=expdptable21.log tables=hr.employees

ORA-31626: job does not exist

ORA-31633: unable to create master table "SYSTEM.SYS_EXPORT_TABLE_05"

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95

ORA-06512: at "SYS.KUPV$FT", line 1020

ORA-16000: database open for read-only access

EXPDP的一些實驗案例

SQL>create user test1 identified by oracle;

SQL>grant dba to test1;

SQL>select * from dba_directories;--查詢目錄名稱和對應(yīng)的路徑

導(dǎo)出導(dǎo)入表

expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdptable.dat logfile=expdptable.log tables=hr.employees,hr.JOBS

--使用system用戶導(dǎo)出hr用戶的兩張表

impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdptable.dat logfile=impdptable.log tables=hr.employees remap_schema=hr:test1 remap_tablespace=example:users TABLE_EXISTS_ACTION=REPLACE

--上面tables參數(shù)色罚,表示導(dǎo)入dumpfile中的一張表hr.employees,如果不加tables參數(shù)账劲,表示導(dǎo)入dumpfile中的所有表

--上面remap_schema表示從hr用戶導(dǎo)入到test1用戶戳护,remap_tablespace參數(shù)表示原表的表空間從example改為users

--上面TABLE_EXISTS_ACTION=replace表示,如果test1已經(jīng)存在了表名一樣的表瀑焦,則drop存在的表再導(dǎo)入

導(dǎo)出導(dǎo)入整個schema

expdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdpschema.dat logfile=expdpschema.log schemas=hr version=10.2.0.1

--使用system用戶進行導(dǎo)出腌且,導(dǎo)出hr整個schema,并且使導(dǎo)出的文件可以導(dǎo)入到更低版本10.2.0.1中

impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdpschema.dat logfile=impdpschema.log remap_schema=hr:test1 EXCLUDE=TABLE:"in('EMPLOYEES')" PARALLEL=2

--使用system用戶進行導(dǎo)入榛瓮,除了表EMPLOYEES外都導(dǎo)入到test1這個schema铺董,并且并行度為2

impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdpschema.dat logfile=impdpschema.log remap_schema=hr:test2 sqlfile=impdpschema.sql

--使用system用戶進行導(dǎo)入,導(dǎo)入test2用戶,但是只生成導(dǎo)入的sql

impdp system/oracle directory=DATA_PUMP_DIR dumpfile=expdpschema.dat logfile=impdpschema.log remap_schema=hr:test3

--使用system用戶進行導(dǎo)入精续,導(dǎo)入test3用戶,就算test3不存在坝锰,也會自動建立,密碼和導(dǎo)出的hr用戶一樣

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末重付,一起剝皮案震驚了整個濱河市顷级,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌确垫,老刑警劉巖弓颈,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異删掀,居然都是意外死亡翔冀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進店門披泪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纤子,“玉大人,你說我怎么就攤上這事付呕〖聘#” “怎么了?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵徽职,是天一觀的道長象颖。 經(jīng)常有香客問我,道長姆钉,這世上最難降的妖魔是什么说订? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮潮瓶,結(jié)果婚禮上陶冷,老公的妹妹穿的比我還像新娘。我一直安慰自己毯辅,他們只是感情好埂伦,可當我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著思恐,像睡著了一般沾谜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胀莹,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天基跑,我揣著相機與錄音,去河邊找鬼描焰。 笑死媳否,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播篱竭,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼力图,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了室抽?” 一聲冷哼從身側(cè)響起搪哪,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坪圾,沒想到半個月后晓折,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡兽泄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年漓概,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片病梢。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡胃珍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜓陌,到底是詐尸還是另有隱情觅彰,我是刑警寧澤,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布钮热,位于F島的核電站填抬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏隧期。R本人自食惡果不足惜飒责,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仆潮。 院中可真熱鬧宏蛉,春花似錦、人聲如沸性置。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹏浅。三九已至辟灰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間篡石,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工西采, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凰萨,地道東北人。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像胖眷,于是被迫代替她去往敵國和親武通。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內(nèi)容