精华内容
下载资源
问答
  • linux系统oracle数据库备份与恢复
    千次阅读
    2022-03-03 09:54:18

    1、root用户登录服务器

    #新建Oracle数据库备份目录
    mkdir -p /backup/oracledata 
    
    #设置目录权限为oinstall用户组的oracle用户(用户oracle与用户组oinstall是在安装Oracle数据库时设置的)
    chown -R oracle:oinstall /backup/oracledata -R 

    2、新建Oracle数据库备份脚本

    vi /backup/oracledata/ordatabak.sh   #新建文件,输入以下代码
    
    #!/bin/sh
    export ORACLE_BASE=/data/oracle
    export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
    export ORACLE_SID=orcl
    export ORACLE_TERM=xterm
    export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
    export LANG=C
    export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    # oracle用户的系统环境变量路径:/home/oracle/.bash_profile
    date=`date +%Y_%m_%d`   #获取系统当前日期时间
    days=7  #设置删除7天之前的备份文件
    orsid=`192.168.0.198:1521/orcl`  #Oracle数据库服务器IP、端口、SID
    orowner=OSYUNWEI  #备份此用户下面的数据
    bakuser=OSYUNWEI  #用此用户来执行备份,必须要有备份操作的权限
    bakpass=OSYUNWEI  #执行备注的用户密码
    bakdir=/backup/oracledata  #备份文件路径,需要提前创建好
    bakdata=$orowner"_"$date.dmp #备份数据库名称
    baklog=$orowner"_"$date.log #备份执行时候生成的日志文件名称
    ordatabak=$orowner"_"$date.tar.gz #最后保存的Oracle数据库备份文件
    cd $bakdir #进入备份目录
    mkdir -p $orowner #按需要备份的Oracle用户创建目录
    cd $orowner #进入目录
    exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$orowner/$bakdata log=$bakdir/$orowner/$baklog #执行备份
    tar -zcvf $ordatabak $bakdata  $baklog  #压缩备份文件和日志文件
    find $bakdir/$orowner  -type f -name "*.log" -exec rm {} \; #删除备份文件
    find $bakdir/$orowner  -type f -name "*.dmp" -exec rm {} \; #删除日志文件
    find $bakdir/$orowner  -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \;  #删除7天前的备份(注意:{} \中间有空格)
    :wq #保存退出
    
    chmod +x /backup/oracledata/ordatabak.sh   #添加脚本执行权限

    3、设置定时

    vi /etc/crontab  #编辑系统任务计划,添加以下代码到最后一行
    
    30 2 * * * oracle  /backup/oracledata/ordatabak.sh  #每天凌晨2点30分,以oracle用户执行ordatabak.sh备份文件
    
    :wq! #保存退出
    
    service crond restart #重启crond

            每天凌晨2点30分,会自动备份数据库到/backup/oracledata/OSYUNWEI目录中,保存为.tar.gz压缩文件,并且删除7天前的备份,即只保留最近7天的数据。

    备注:以上所有的代码都是在英文半角状态下输入。

    更多相关内容
  • 先来介绍一些不使用脚本我们直接使用命令备份与还原oracle数据库Oracle数据备份:步骤 1 备份用户数据。1.使用linux系统下的数据库管理员账号连接linux终端。2. 执行以下语句,创建“bak_dir”文件夹。 代码如下: ...
  • Linux 自动备份oracle数据: 曾经有个同事,来回操作开发和生产的数据库,结果误删了生产的数据库,那种心情我想不是一般人能理解的,虽然说oracle可以有方法还原,但并不是彻底的。 所以,在工作中,不管是开发还是...
  • 1.在没有安装oracle数据库linux环境下,远程定时备份oracle数据库。 2.并且提供安装包,以及操做文档。
  • 一、基本环境 (一)正式数据库环境 操作系统LINUX rhel-server-6.5-x86_64 服务器 :H3C R6800 2台 数据库实例:CT 、PF 、LA 、PL 硬盘使用:CT/PF 3.1TB ...(二)恢复数据库环境 操作系统LINUX
  • 采用rman备份oracle数据库从Windows操作系统恢复Linux操作系统方法
  • 原标题:Linux系统Oracle数据库备份和还原操作说明Oracle数据库备份和还原操作说明使用Oralce数据库导出(expdp)、数据库导入(impdp)程序在Oracle数据库之间传输数据对象,进行数据库的备份和还原。数据泵程序需要...

    原标题:Linux系统上Oracle数据库备份和还原操作说明

    Oracle数据库备份和还原操作说明

    使用Oralce数据库导出(expdp)、数据库导入(impdp)程序在Oracle数据库之间传输数据对象,进行数据库的备份和还原。数据泵程序需要在数据库服务端使用。使用导出备份时可能产生数据不一致,所以需要先停止应用程序,再进行导出备份。

    以下假设数据库帐户为imanage,对同名的schema进行备份和还原。

    因为Linux系统中有文件权限控制,请用oracle用户登录操作系统,再进行以下操作。

    1. 创建备份目录

    1. 在数据库服务器上手工创建文件夹,比如:/home/oracle/data_dp,用于存放备份文件。比如,启动一个终端会话,执行以下命令。

    2. 启动一个终端会话,使用sqlplus以system帐户登入数据库,并执行如下语句创建和查看目录EXPDP_DIR。如图1所示。

    说明:EXPDP_DIR对应数据库服务器上已存在的路径,请根据实际环境修改。

    3. 如果想用8thManage数据库帐户来备份,需要授予读写目录EXPDP_DIR的权限,执行如下语句。如图1所示。

    图1

    7fbf17415c631a332ca16c42b0428ba8.png

    2. 备份

    启动一个终端会话,先设置NLS_LANG参数,再运行expdp,使用system帐户导出imanage schema。执行以下命令,如图2所示。

    参数说明:

    ORCL:数据库网络服务名(使用Oracle Net Manager配置)

    directory:导出文件保存目录

    schemas:要导出的方案的列表

    dumpfile:导出备件文件名

    logfile:导出的日志文件名

    图2

    30222b9f7069cc5bb6ca7c91c2e56999.png

    3. 还原

    此处假设还原的目标数据库的schema为new_imanage(数据库用户),数据库表空间为new_imanage。

    1. 在sqlplus中,使用system帐户连接数据库查看是否存在同名的数据库表空间。查看语句如下:

    如果已存在同名的数据库表空间,则跳到第2步操作;

    如果不存在相同的数据库表空间,需先创建,执行语句如下:

    注意:datafile的路径是数据库服务器操作系统中的路径,请根据实际环境修改。

    2. 在sqlplus中,使用system帐户连接数据库查看是否存在同名的schemas。查看语句如下:

    如果已存在相同的schemas,需先删除再创建。

    删除schemas语句如下:

    创建schemas语句如下:

    3. 启动一个终端会话,先设置NLS_LANG参数,再运行impdp,使用system帐户导入imanage schema。执行以下命令:

    参数说明:

    ORCL:数据库网络服务名(使用Oracle Net Manager配置)

    directory:备份文件保存目录(比如值为EXPDP_DIR)

    dumpfile:使用的备件文件名

    logfile:导入的日志文件名

    remap_schema:将一个方案中的对象加载到另一个方案

    remap_tablespace:将表空间对象重新映射到另一个表空间

    备注:

    还原时impdp.log文件中出现以下ORA-编号开头的信息是正常的,可以忽略。

    ORA-31684: 对象类型 USER:"XXX" 已存在

    ORA-39082: 对象类型 XXX 已创建, 但带有编译警告

    ORA-39126: 在 KUPW$WORKER.PUT_DDLS [TABLE_STATISTICS] 中 Worker 发生意外致命错误 (这是最后导入统计信息出错,可以忽略)返回搜狐,查看更多

    责任编辑:

    展开全文
  • 数据库的字符集必须和Linux下设置的环境变量一致,不然会有乱码。 以下两个sql语句都可以查到: select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET'; select * from v$nls_parameters ...
  • Linux下的Oracle数据库备份与恢复(emp和imp命令) 相比MySQL,Oracle的备份与恢复命令更为强大,备份命令为emp,恢复命令为imp。其中所使用的逻辑文件通常后缀为dmp,oracle的逻辑备份文件,常用于数据库逻辑...

                                          Linux下的Oracle的数据库备份与恢复(emp和imp命令)

    相比MySQL,Oracle的备份与恢复命令更为强大,备份命令为emp,恢复命令为imp。其中所使用的逻辑文件通常后缀为dmp,oracle的逻辑备份文件,常用于数据库逻辑 备份,数据库 迁移等操作。

     

    exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移

    它有三种模式:
           a.  用户模式: 导出用户所有对象以及对象中的数据;
           b.  表模式: 导出用户所有表或者指定的表;
           c.  整个数据库: 导出数据库中所有对象。

    imp导入工具它有三种模式:
           a.  用户模式: 导入用户所有对象以及对象中的数据;
           b.  表模式: 导入用户所有表或者指定的表;
           c.  整个数据库: 导入数据库中所有对象。

    imp所执行的步骤: 
       (1) create table  (2) insert data  (3) create index (4) create triggers,constraints --新建表,插入数据,生成索引,新建触发器,各类约束。

    需要注意的是,只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入 

    使用导入工具imp时可能出现的问题 :

    (1) 数据库对象已经存在 
    一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;   
    数据库对象已经存在, 按缺省的imp参数, 则会导入失败 
    如果用了参数ignore=y, 会把exp文件内的数据内容导入 
    如果表有唯一关键字的约束条件, 不合条件将不被导入 
    如果表没有唯一关键字的约束条件, 将引起记录重复 

    (2) 数据库对象有主外键约束 
          不符合主外键约束时, 数据会导入失败  
          解决办法: 先导入主表, 再导入依存表 
    disable目标导入对象的主外键约束, 导入数据后, 再enable它们 
    (3)  权限不够 
    如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限 

    (4)  导入大表( 大于80M ) 时, 存储分配失败 
          默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上. 
          导入时, 如果不存在连续一个大数据块, 则会导入失败. 
          导出80M以上的大表时, 记得compress= N, 则不会引起这种错误. 

    (5) imp和exp使用的字符集不同 
          如果字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息. 
          导入完成后再改回来. 

    select * from v$nls_parameters where parameter='NLS_CHARACTERSET'; --查询当前系统所使用的字符集

    select * from v$nls_parameters; --查询所有有关字符集的参数

    修改系统的字符集:

    在oracle 8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下

    若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:
      SQL>STARTUP MOUNT;
      SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
      SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
      SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
      SQL>ALTER DATABASE OPEN;
      SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; //跳过超子集检测  AL32UTF8;
      SQL>ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;AL32UTF8;

    以上流程为:关库,启动数据库到mount状态,进入数据库维护模式,此时只有system和sys用户可登录数据库。关闭DBMS调度程序和DBMS调度任务,关闭自动任务启动,跳过字符超子集检查,设定系统字符集,关库,重新启动数据库。



    (6) imp和exp版本不能往上兼容 
    imp可以成功导入低版本exp生成的文件, 不能导入高版本exp生成的文件 
    根据情况我们可以用 ​​​​​​​

     

     

    exp和imp  与数据泵expdp和impdp的区别:

    1、exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。exp在客户端使用,要受到网速的影响,因此会比较慢。
    2、expdp和impdp是服务端的工具程序,他们只能在Oracle服务端使用,不能在客户端使用。
    3、imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。
    4、对于10g以上的服务器,使用exp通常不能导出0行数据的空表,而此时必须使用expdp导出。
    5,数据泵expdp和impdp导出可以使用parallel属性指定并行任务导出,parallel=2就是并行2个任务导出。当然,这个并不是越多越好,需要考虑服务器的性能和cpu的个数等等因素。还可以通过导出多个文件的方式提高性能,即使用dumpfile=expdp.dp1,expdp.dp2这种方式提高性能。需要用户根据实际情况设置
    6,exp导出时读取的是sql,通过加载sql查询结果到缓存,然后在写进目标文件,而expdp是直接读取的数据块,直接从数据块写进目标文件。
    
    

     

    先来个简单的示例,导出用户zsk的emp表和导入emp表。

    a,导出用户zsk的emp表

    说明,zsk用户是一个新用户,emp表也自己建立,建表完成后,导出这个emp表为文件,然后删除emp表,在导入文件恢复emp表。

    b,建立zsk用户并赋予相应的权限

    进入sqlplus,使用sys用户登陆数据库,新建zsk用户,赋予建表权限,数据插入权限,删除表权限。

    create user zsk identified by zsk; grant create session to zsk;grant  unlimited tablespace to zsk;​​​​​​​grant create any table to zsk;--连接数据库权限,读取表空间权限,新建表权限,就这几个权限够了,zsk用户密码为zsk。

    c,建立示例表emp,建表SQL语句如下,插入14条记录:

    create table EMP
    (
    empno NUMBER(4),
    ename VARCHAR2(10),
    job VARCHAR2(9),
    mgr NUMBER(4),
    hiredate DATE,
    sal NUMBER(7,2),
    comm NUMBER(7,2),
    deptno NUMBER(2)
    )
    ;
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (1, 'dog', 'code', 7369, to_date('05-06-2018', 'dd-mm-yyyy'), 5000, 5000, 10);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980', 'dd-mm-yyyy'), 800, null, 20);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-02-1981', 'dd-mm-yyyy'), 1600, 300, 
    30);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7521, 'WARD', 'SALESMAN', 7698, to_date('22-02-1981', 'dd-mm-yyyy'), 1250, 500, 30);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7566, 'JONES', 'MANAGER', 7839, to_date('02-04-1981', 'dd-mm-yyyy'), 2975, null, 
    20);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('28-09-1981', 'dd-mm-yyyy'), 1250, 1400, 
    30);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7698, 'BLAKE', 'MANAGER', 7839, to_date('01-05-1981', 'dd-mm-yyyy'), 2850, null, 
    30);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7788, 'SCOTT', 'ANALYST', 7566, to_date('19-04-1987', 'dd-mm-yyyy'), 3000, null, 
    20);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981', 'dd-mm-yyyy'), 5000, null, 
    10);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7844, 'TURNER', 'SALESMAN', 7698, to_date('08-09-1981', 'dd-mm-yyyy'), 1500, 0, 30);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7876, 'ADAMS', 'CLERK', 7788, to_date('23-05-1987', 'dd-mm-yyyy'), 1100, null, 20);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7900, 'JAMES', 'CLERK', 7698, to_date('03-12-1981', 'dd-mm-yyyy'), 950, null, 30);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7902, 'FORD', 'ANALYST', 7566, to_date('03-12-1981', 'dd-mm-yyyy'), 3000, null, 20);
    insert into EMP (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    values (7934, 'MILLER', 'CLERK', 7782, to_date('23-01-1982', 'dd-mm-yyyy'), 1300, null, 10);
    commit;

    d,导出该emp表

    在Oracle用户下,输入命令exp进入交互式

    [oracle@centos11 ~]$ exp
    
    Export: Release 11.2.0.1.0 - Production on Tue Jan 19 20:13:43 2021
    
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
    
    
    Username: zsk
    Password: 
    
    Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    Enter array fetch buffer size: 4096 > 
    
    Export file: expdat.dmp > 
    
    (2)U(sers), or (3)T(ables): (2)U > T
    
    Export table data (yes/no): yes > 
    
    Compress extents (yes/no): yes > 
    
    Export done in US7ASCII character set and AL16UTF16 NCHAR character set
    server uses AL32UTF8 character set (possible charset conversion)
    
    About to export specified tables via Conventional Path ...
    Table(T) or Partition(T:P) to be exported: (RETURN to quit) > emp
    
    . . exporting table                            EMP         14 rows exported
    Table(T) or Partition(T:P) to be exported: (RETURN to quit) > 
    
    Export terminated successfully without warnings.
    

    保存的文件在Oracle用户目录下的oracle目录下,以上都是默认,在RETURN toquit 这一行后面输入要备份的表名,然后一路回车即可。以上导出是默认开启压缩,导出表数据,输入的T表示导出单表。第二个RETURN to quit 是当你想要在导出第二张表的时候输入,如果不想导出,直接回车即可。

    e,导入emp数据库。

    首先sqlplus登陆zsk,删除emp表。drop table emp;

    然后执行命令: imp zsk/zsk@test file=/home/oracle/expdat.dmp

    数据库名称为test,因此@后写test,输入如下为正常:

    [oracle@centos11 ~]$ imp zsk/zsk@test file=/home/oracle/emp.dmp
    
    Import: Release 11.2.0.1.0 - Production on Tue Jan 19 20:25:06 2021
    
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
    
    
    Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    Export file created by EXPORT:V11.02.00 via conventional path
    import done in US7ASCII character set and AL16UTF16 NCHAR character set
    import server uses AL32UTF8 character set (possible charset conversion)
    . importing ZSK's objects into ZSK
    . importing ZSK's objects into ZSK
    . . importing table                         "EMPS"         14 rows imported
    Import terminated successfully without warnings.
    

    如果原表没有删除就导入的话,那么会报错对象以存在,报错如下,虽然也是successfully:

    [oracle@centos11 ~]$ imp zsk/zsk@test file=/home/oracle/expdat.dmp
    
    Import: Release 11.2.0.1.0 - Production on Tue Jan 19 20:27:24 2021
    
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
    
    
    Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    Export file created by EXPORT:V11.02.00 via conventional path
    import done in US7ASCII character set and AL16UTF16 NCHAR character set
    import server uses AL32UTF8 character set (possible charset conversion)
    . importing ZSK's objects into ZSK
    . importing ZSK's objects into ZSK
    IMP-00015: following statement failed because the object already exists:
     "CREATE TABLE "EMPS" ("EMPNO" NUMBER(4, 0), "ENAME" VARCHAR2(10), "JOB" VARC"
     "HAR2(9), "MGR" NUMBER(4, 0), "HIREDATE" DATE, "SAL" NUMBER(7, 2), "COMM" NU"
     "MBER(7, 2), "DEPTNO" NUMBER(2, 0))  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRA"
     "NS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST"
     " GROUPS 1 BUFFER_POOL DEFAULT)                    LOGGING NOCOMPRESS"
    Import terminated successfully with warnings.
    

     

     

     


        
       i

     

    展开全文
  • linuxoracle数据库自动备份与恢复,Windows下oracle数据库自动备份与恢复
  • 怎样在Linux系统备份Oracle数据库

    千次阅读 2021-05-04 04:42:59
    LinuxOracle数据库备份的方法有很多,就像mysql一样可以使用不同方法进行备份oracle数据库先来介绍一些不使用脚本我们直接使用命令备份与还原oracle数据库Oracle数据备份:步骤 1 备份用户数据。1.使用linux系统...

    在Linux中Oracle数据库备份的方法有很多,就像mysql一样可以使用不同方法进行备份oracle数据库

    先来介绍一些不使用脚本我们直接使用命令备份与还原oracle数据库

    Oracle数据备份:

    步骤 1 备份用户数据。

    1.使用linux系统下的数据库管理员账号连接linux终端。

    2. 执行以下语句,创建“bak_dir”文件夹。

    mkdir bak_dir

    3.

    执行以下语句,为“bak_dir”文件夹赋予读、写和执行权限。

    chmod 777 bak_dir

    4.

    执行以下语句,以sysdba用户登录oracle数据库服务器。

    sqlplus 数据库管理员账号/密码@数据库实例名 as

    sysdba

    5.

    执行以下语句,将“bak_dir”指定为“/opt/oracle/bak_dir”。

    create or replace directory bak_dir as

    '/opt/oracle/bak_dir'

    commit

    6.

    执行以下语句,将“bak_dir”的读、写和执行权限赋给xx(数据用户名)用户。

    grant all on directory bak_dir to

    xx

    commit

    7. 执行以下语句,退出oracle数据库服务器。

    quit

    执行以下语句,将sysdb用户的表备份到“bak_dir”目录下。

    8.

    expdp xx(要导出表所在的数据库用户名)/xx(密码)@数据库实例名

    directory=bak_dir dumpfile=expdb_xx.dmp logfile=expdb_xxlog

    tables=表名

    Oracle数据还原:

    1.在命令行输入:

    sqlplus "/as sysdba"

    2.

    执行以下语句登录xx数据库,用户名:xx,密码:xx(请输入当地实际密码)

    conn xx/xx;

    3.如果恢复的表中有涉及到触发器的请停止触发器,例:A表

    alter table A disable all

    triggers;

    commit;

    4. 执行以下语句退出当前用户

    quit;

    5. 执行以下语句,恢复用户数据。

    [mw_shl_code=php,true] impdp xx/xx@数据库实例名 directory=bak_dir

    table_exists_action=truncate dumpfile=expdb_xx.dmp

    logfile=impdb_xx.log[/mw_shl_code]

    5.在命令行输入:sqlplus "/as sysdba"

    6.

    执行以下语句登录xx数据库,用户名:xx,密码:xx(请输入当地实际密码)

    conn xx/xx;

    7. 执行以下语句打开被禁止的触发器

    alter table A enable all

    triggers;

    commit;

    上面方法是可以实现我们想要的,但但大型WEB服务器肯定是要自动定时进行备份的。

    1.--创建数据表空间

    2.create tablespace test_data

    3.logging

    4.datafile

    '/u01/app/oradata/test/TEST.dbf'

    5.size 32m

    6.autoextend on

    7.next 32m maxsize 2048m

    8.extent management local;

    9.

    10.--创建用户并指定表空间

    11.create user TEST identified by

    123

    12.default tablespace test_data

    13.temporary tablespace temp;

    14.

    15.--给用户授予权限

    16.grant connect,resource to

    TEST;

    用Test用户登录,创建一个表,并插入两条数据:

    create table t1(

    Id varchar(50) primary key,

    title varchar(50)

    );

    insert into t1

    values(sys_guid(),'t1');

    insert into t1

    values(sys_guid(),'t2');

    commit;

    先写一个导出的脚本文件:

    [mw_shl_code=php,true]export

    ORACLE_BASE=/u01/app

    export

    ORACLE_HOME=/u01/app/oracle

    export ORACLE_SID=TEST

    export

    PATH=$ORACLE_HOME/bin:$PATH

    d=$(date ' %Y%m%d')

    exp TEST/123@testfile=/home/oracle/backup/$d.dmp

    log=/home/oracle/backup/$d.log owner=TEST

    zip -m /home/oracle/backup/$d.zip

    /home/oracle/backup/$d.dmp

    /home/oracle/backup/$d.log[/mw_shl_code]

    前4句是设置环境变量,因为crontab定时调用时,不会使用oracle用户的环境变量,所以要先把它们导进来。第6行以当前日期作为导出的文件名,例如20120626.dmp和20120626.log。第7行把这两个文件打成一个zip包,并删掉这两个文件。

    要用chmod命令把这个sh标记为可执行:

    chmod x backup.sh

    用oracle用户,输入crontab

    -e命令,编辑oracle用户的任务计划:

    代码如下

    1.[oracle@localhost backup]$ crontab

    -e

    2.42 13 * * * /home/oracle/backup/backup.sh

    这样就添加了一个计划,在每天的13点42分运行/home/oracle/backup/backup.sh。

    这样就可以了,利用linux计划任务就实现了。

    备份策略:

    星期天 0 级

    星期一,二,四,五,六 2 级

    星期三 1 级

    --创建本地管理路径

    mkdir -p

    /dinglp/ora_managed/backup

    mkdir -p

    /dinglp/ora_managed/backup

    mkdir -p

    /dinglp/ora_managed/backup/export-

    mkdir -p /dinglp/ora_managed/backup/log

    mkdir -p /dinglp/ora_managed/backup/rman_backup

    mkdir -p /dinglp/ora_managed/scripts

    --创建rman表空间和rman用户

    create tablespace rman_tbs datafile '/oradata/luke/rman_tbs01.dbf'

    size 1024M;

    create user rman_dlp identified by dlp default tablespace rman_tbs

    temporary tablespace temp;

    grant connect,resource ,recovery_catalog_owner to rman;

    --注册catalog 数据库

    rman catalog rman_dlp/dlp

    create catalog tablespace rman_tbs;

    connect target sys/dg@priamry

    register database;

    report schema;

    --设置备份参数

    configure retention policy to redundancy 2;

    configure retention policy to recovery window of 7 days;

    --以下是备份脚本(可以通过vi进行编辑)

    dlp-> touch exp_rman.par

    dlp-> touch exp_rman.sh

    dlp-> touch rman_bk_LEVEL0.rcv (数据库0级备份)

    dlp-> touch rman_bk_LEVEL0.sh

    dlp-> touch rman_bk_LEVEL1.rcv (数据库1级备份)

    dlp-> touch rman_bk_LEVEL1.sh

    dlp-> touch rman_bk_LEVEL2.rcv (数据库2级备份www.linuxidc.com)

    dlp-> touch rman_bk_LEVEL2.sh

    --倒出RMAN用户数据脚本exp_rman.par

    ##################################################

    ### exp_rman.par ###

    ##################################################

    userid=rman_dlp/dlp

    file=/dinglp/ora_managed/backup/export/rman.dmp

    log=/dinglp/ora_managed/backup/log/rman.log

    --倒出RMAN数据SHELL脚本exp_rman.sh

    ##################################################

    ### exp_rman.sh ###

    ##################################################

    #!/bin/bash

    source /home/Oracle/.bash_profile

    cd /dinglp/ora_managed/scripts

    exp parfile=exp_rman.par

    --零级备份RMAN脚本rman_bk_LEVEL0.rcv

    connect catalog rman_dlp/dlp

    connect target sys/dg@primary

    run {

    allocate channel d1 type disk;

    allocate channel d2 type disk;

    backup incremental level 0 database format

    '/dinglp/ora_managed/backup/rman_backup/level0_%d_%s_%p_%u.bak'

    tag='level 0' include current controlfile;

    sql 'alter system archive log current';

    backup archivelog all format

    '/dinglp/ora_managed/backup/rman_backup/log_%d_%s_%p_%u.bak' delete

    all input;

    release channel d2;

    release channel d1;

    }

    crosscheck backup;

    delete noprompt expired backup;

    delete noprompt obsolete;

    resync catalog;

    exit;

    --零级备份SHELL脚本的rman_bk_LEVEL0.sh

    #####################################################################

    ### rman_bk_LEVEL0.sh ###

    #####################################################################

    #!/bin/bash

    source /home/Oracle/.bash_profile

    cd /dinglp/ora_managed/scripts

    rman cmdfile=rman_bk_LEVEL0.rcv

    msglog=$HOME/backup/log/rman_bk_LEVEL0.log

    ./dinglp/ora_managed/script/exp_rman.sh

    --一级差异增量备份RMAN脚本rman_bk_LEVEL1.rcv

    connect catalog rman_dlp/dlp

    connect target sys/dg@primary

    run {

    allocate channel d1 type disk;

    backup incremental level 1 format

    '/dinglp/ora_managed/backup/rman_backup/level1_%d_%s_%p_%u.bak' tag

    = 'level 1' database;

    sql 'alter system archive log current';

    backup archivelog all format

    '/dinglp/ora_managed/backup/rman_backup/log_%d_%s_%p_%u.bak' delete

    all input;

    release channel d1;

    }

    crosscheck backup;

    delete noprompt expired backup;

    delete noprompt obsolete;

    resync catalog;

    exit;

    --一级差异增量备份SHELL脚本rman_bk_LEVEL1.sh

    #####################################################################

    ### rman_bk_LEVEL1.sh ###

    #####################################################################

    #!/bin/bash

    source /home/Oracle/.bash_profile

    cd /dinglp/ora_managed/scripts

    rman cmdfile=rman_bk_LEVEL1.rcv

    msglog=/dinglp/ora_managed/backup/log/rman_bk_LEVEL1.log

    . /dinglp/ora_managed/scripts/exp_rman.sh

    --二级差异增量备份RMAN脚本rman_bk_LEVEL2.rcv

    connect catalog rman_dlp/dlp

    connect target sys/dg@primary

    run {

    allocate channel d1 type disk;

    backup incremental level 2 format

    '/dinglp/ora_managed/backup/rman_backup/level2_%d_%s_%p_%u.bak' tag

    = 'level 2' database;

    sql 'alter system archive log current';

    backup archivelog all format

    '/dinglp/ora_managed/backup/rman_backup/log_%d_%s_%p_%u.bak' delete

    all input;

    release channel d1;

    }

    crosscheck backup;

    delete noprompt expired backup;

    delete noprompt obsolete;

    resync catalog;

    exit;

    --二级差异增量备份SHELL脚本rman_bk_LEVEL2.sh

    #####################################################################

    ### rman_bk_LEVEL2.sh ###

    #####################################################################

    #!/bin/bash

    source /home/Oracle/.bash_profile

    cd /dinglp/ora_managed/scripts

    rman cmdfile=rman_bk_LEVEL2.rcv

    msglog=/dinglp/ora_managed/backup/log/rman_bk_LEVEL2.log

    . /dinglp/ora_managed/scripts/exp_rman.sh

    --提高RMAN增量备份性能

    alter database enable block change tracking using file

    '/u01/app/Oracle/admin/devdb/bdump/luke.log';

    desc v$block_change_tracking;

    --RMAN 动态视图

    V$ARCHIVED_LOG 显示在数据库中已经创建、备份或清除的归档文件。

    V$BACKUP_CORRUPTION 显示在备份集的备份过程中找到的损坏块。

    V$COPY_CORRUPTION 显示映像复制过程中找到的损坏块。

    V$BACKUP_DATAFILE 用于通过确定各数据文件中的块数来创建大小相同的备份集。通过它也可以找出数据文件中已损坏的块数。 V$BACKUP_REDOLOG 显示在备份集中存储的归档日志。

    V$BACKUP_SET 显示已经创建的备份集。

    V$BACKUP_PIECE 显示为备份集创建的备份片。

    --如何监视复制进程

    使用 SET COMMAND ID 命令可将服务器会话与通道联系起来。

    查询 V$PROCESS 和 V$SESSION,可以确定会话与哪些 RMAN 通道对应。

    查询 V$SESSION_LONGOPS,可以监视备份和复制的进度。

    --linux下自动运行备份脚本

    crontab格式简介

    第1列分钟1~59

    第2列小时1~23(0表示子夜)

    第3列日1~31

    第4列月1~12

    第5列星期0~6(0表示星期天)

    第6列要运行的命令

    [mw_shl_code=html,true][root@dlp ~]# vi /etc/crontab

    SHELL=/bin/bash

    PATH=/sbin:/bin:/usr/sbin:/usr/bin

    MAILTO=root

    HOME=/

    # run-parts

    01 * * * * root run-parts /etc/cron.hourly

    02 4 * * * root run-parts /etc/cron.daily

    22 4 * * 0 root run-parts /etc/cron.weekly

    42 4 1 * * root run-parts /etc/cron.monthly

    00 22 * * 0 root

    /dinglp/ora_managed/scripts/rman_bk_LEVEL0.sh

    00 22 * * 3 root

    /dinglp/ora_managed/scripts/rman_bk_LEVEL1.sh

    00 22 * * 1,2,4,5,6 root

    /dinglp/ora_managed/scripts/rman_bk_LEVEL2.sh

    展开全文
  • 常见备份策略:数据库每天自动备份数据需求第一:每天自动备份当天的数据库的数据信息 。第二:把当天备份的数据和日志一起打成.tar.gz包,这样会减少所占硬盘的空间。第三:用FTP把当天的数据.tar.gz包上传到外面的...
  • Linuxoracle数据库备份导出 服务器信息如下: 192.168.1.29 用户名root 密码 password oracle用户操作 备份地址 /home/oracle/baknew 1、检查服务器存储空间,需大于60G(数据库备份文件大约占用的空间), df -h...
  • 主要介绍了Linux oracle数据库备份完成后可以自动压缩脚本代码,大家参考使用
  • Oracle是目前大中型企业普遍使用的数据库,作为一名技术人员,就必须清楚Oracle备份与恢复,这里我分享的是Linux系统下全盘备份与全盘恢复,希望能够帮助到各位朋友。
  • LinuxOracle备份与恢复,其中包括shell命令文件,详细描述了可能出现的问题,如何解决等情况
  • inux下oracle11g 数据库备份异机还原,适用于可以停机备份数据库,方便数据库文件过大还原,本人测试的数据库文件有一百多G
  • Oracle数据库备份存在磁盘空间不足解决方法
  • Linux定时备份oracle数据库

    千次阅读 2021-12-19 15:43:29
    Linux用shell脚本+crontab定时备份数据库
  • 相信为数不少的系统管理员每天都在做着同一样的工作mdash;mdash;对数据进行备份。一旦哪一天疏忽了,而这一天系统又恰恰发相信为数不少的系统管理员每天都在...下面笔者结合实践经验,谈一谈UNIX环境下Oracle数据库...
  • oracle数据库备份恢复排错指南
  • #创建逻辑目录Oracle_expdp,存放数据物理目录为/orabakdir create or replace directory Oracle_expdp as '/orabakdir'; #查询逻辑目录是否成功 select * from dba_directories #赋权 Grant read,write on ...
  • Linux下实现Oracle数据库自动备份的脚本
  • 数据备份: 1.使用Linux系统下的数据库管理员账号连接linux终端。 ...2. 执行以下语句,创建“bak_dir”文件夹。...3. 执行以下语句,为“bak_...4. 执行以下语句,以sysdba用户登录Oracle数据库服务器。  sqlplus
  • 项目需求:把服务器A上的一个数据库整库备份到服务器B上一、备份数据库1. 远程登录到服务器A2. 使用如下命令导出数据库:exp 用户名/密码@ip /home/database.dmp二、传输文件1. 远程登录到服务器B2. 使用如下命令将...
  • linux命令及oracle备份

    2021-05-07 07:49:25
    1.linux下查看占用空间 df -h2.gzip 压缩文件 gzip xx.dmp xx.dmp.gz3.解压缩 gzip -d xx.dmp.gz4.查看tomcat进程ps -ef |grep tomcat5.杀死进程kill -9 pid6.导出数据exp nciclccd_e/nciclccd_e@LCC buffer=9999999...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,827
精华内容 19,930
关键字:

linux系统oracle数据库备份与恢复