ORACLE的备份和迁移

脱机冷备

冷备份发生在数据库已经正常关闭的情况下

拷贝文件,假如数据库文件都在目录A,拷贝这些数据库文件到其他目录比如目录B,如果要恢复,则也是在数据库shutdown的状态下,把这些文件从目录B拷回目录A,再startup数据库

--找出所有的控制文件

SQL> select name from v$controlfile;

--找出所有的数据文件和临时文件

SQL> select file_name from dba_data_files;

SQL> select file_name from dba_temp_files;

--找出所有的redo log文件

SQL> select MEMBER from v$logfile;

用户管理的备份与恢复也称OS物理备份,是指通过数据库命令设置数据库为备份状态,然后用操作系统命令,拷贝需要备份或恢复的文件。生产环境中使用的场景并不多,主要见于archivelog模式下,在表空间或数据文件级的备份。如果是no archivelog,一旦日志被覆盖,有备份文件也恢复不了。因为恢复的时候,要用到备份时刻开始的日志。

控制文件的备份格式

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类似重建控制文件中的内容,文本文件,可以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表示自动使用数据库推荐的归档日志或在线日志

--输入了错误归档日志或在线日志会报错,但是不影响继续恢复,可以继续输入recover database using backup controlfile;继续选择正确的日志进行恢复

SQL> alter database open RESETLOGS;

因为,控制文件不是最新的,打开到mount状态后,这时可以查寻select * from v$log,但是v$log.status和v$log.SEQUENCE#不一定是准确的(控制文件中当前在线日志序列号还是陈旧的,是当初备份时的,而控制文件备份后online redo log可能进行了多次切换),若按常规方式打开,会报错,所以只要是控制文件是恢复或重建过来的,oracle一律采用RESETLOGS重设日志功能,日志序列号从1重新开。

3.修改数据库结构后丢失所有控制文件

--必须执行两次SQL> recover database using backup controlfile;

第一次:把新增的数据文件信息写入控制文件,虽然写入了控制文件,但是数据文件的名称是不对的 

第二次:真正的恢复

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.修改数据库后脱机或者只读表空间,丢失所有控制文件

--此案例实验有误,需要重命名数据文件后再执行一次SQL> recover database using backup controlfile;

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

--不需要执行两次SQL> recover database using backup controlfile;

是因为重建控制文件里面已经有了一次recover database using backup controlfile,已经把新增的数据文件信息写入控制文件

(二)、丢失日志文件或日志文件组

--只有V$LOG.STATUS=INACTIVE和UNUSED的日志组才可以使用clear来恢复

--active和current的都不行,如果active和current的丢失,那么只能整个数据库执行恢复,并且是不完全恢复

V$LOG.STATUS=ACTIVE

最近一次的完全检查点SCN小于该日志中最后一条重做记录的SCN,说明完全检查点还没有越过这个在线日志

说明此redo log中的数据没有全部写入了数据文件和控制文件

V$LOG.STATUS=INACTIVE

最近一次的完全检查点SCN大于该日志中最后一条重做记录的SCN,说明完全检查点已经越过这个在线日志

说明此redo log中的数据全部写入了数据文件和控制文件

1.丢失系统表空间

--本实验中还是使用了备份文件,现实情况中,如果没有任何备份,丢失系统表空间,基本无望。

//关闭数据库备份system 表空间的数据文件

[oracle@oracle ~]cp ..

不能参考非系统表空间对数据文件脱机方式打开数据库,是因为系统表空间和对应数据文件不能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.丢失非系统表空间

非系统表空间的数据文件丢失,可以使用数据文件脱机的方式来打开数据库

EXP迁移表空间:快的原因是因为,只是导出了元数据,实际数据文件是从源库拷贝到了目标库

目标端:DBCA建立一个orcl的数据库

源表空间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步操作在源数据库中操作,5、6、7步在目的数据库操作。

1. 用as sysdba的权限登录ORACLE。检查源表空间test是否自包含,并设置源表空间置为READ ONLY,使得表空间下的数据文件置为READ ONLY状态,可以进行操作系统级的拷贝。--如果是生产系统请注意选择好进行此操作的时间。

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

SQL> select * from sys.transport_set_violations;--没有结果表示自包含

SQL>ALTER TABLESPACE test READ ONLY;

2. 利用EXP工具进行数据库表空间的迁移,需要as sysdba权限

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

3. 将待迁移的表空间下的所有数据文件进行操作系统级的拷贝,复制到目的数据库orcl1的目录下,比如拷贝后名称为/u01/app/oracle/oradata/orcl/test999.dbf。

4. 将源tablsspace_name表空间置为READ WRITE,使得表空间下的数据文件置为READ WRITE状态

SQL> select tablespace_name,status from dba_tablespaces;

SQL>ALTER TABLESPACE test READ WRITE;

SQL> select tablespace_name,status from dba_tablespaces;

5.  在目的数据库上建立相应的用户user_name并赋权限,不要建立要传输的表空间

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.  在目的数据库上利用IMP工具进行数据库表空间的迁移

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

7.  在目的数据库上将目的tablsspace_name表空间置为READ WRITE,使得表空间下的数据文件置为READ WRITE状态

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的导出文件/home/oracle/test2018.dmp和test表空间下所有数据文件都要拷贝到异机

EXPDP

SQL文件:描述指定作业所包含对象的若干DDL语句,对应impdp中参数sqlfile,加上sqlfile参数后,就不是真正的导入,而是生成导入对象的ddl语句

转储文件:即包含数据和元数据的文件,对应expdp中参数dumpfile

日志文件:用于记录导出时的相关信息,对应expdp、impdp中参数logfile

expdp迁移表空间的官方文档

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

EXP可以在read only模式下操作

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

EXPDP导出过程中会建立一个JOB且会产生一张表SYS_EXPORT_SCHEMA_01,导完后又会自动删除,所以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;--查询目录名称和对应的路径

导出导入表

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

--使用system用户导出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参数,表示导入dumpfile中的一张表hr.employees,如果不加tables参数,表示导入dumpfile中的所有表

--上面remap_schema表示从hr用户导入到test1用户,remap_tablespace参数表示原表的表空间从example改为users

--上面TABLE_EXISTS_ACTION=replace表示,如果test1已经存在了表名一样的表,则drop存在的表再导入

导出导入整个schema

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

--使用system用户进行导出,导出hr整个schema,并且使导出的文件可以导入到更低版本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用户进行导入,除了表EMPLOYEES外都导入到test1这个schema,并且并行度为2

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

--使用system用户进行导入,导入test2用户,但是只生成导入的sql

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

--使用system用户进行导入,导入test3用户,就算test3不存在,也会自动建立,密码和导出的hr用户一样

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容