备份与还原ORACLE数据库(通过CMD命令执行)

image

31.1:(若用程序调用cmd,则在备份和还原 末尾语句加上 2>&1 ,直接运行则不需要加)

      --备份:
     1) exp SA/"""abc@1234"""@192.168.31.1:1521/DB1 buffer=10240000 file=C:\bak\data_back.dmp log=C:\bak\data_bak_explog.txt owner=(sa,user1) 2>&1
      --还原:还原前先执行删除,后执行还原
    1)  sqlplus sa/"""abc@1234"""@192.168.31.1:1521/DB1 @C:\bak\deleteDBObjects.txt
    2)  imp SA/"""abc@1234"""@192.168.31.1:1521/DB1 file=C:\bak\data_back.dmp full=y ignore=y 2>&1

 

deleteDBObjects.txt内容:
                      declare vsql varchar2(2000);
                      begin
                            --删除表
                            BEGIN
                              for i in (select 'drop table '||owner||'.'||table_name||' cascade constraints' v_name
                                          from dba_tables where owner='SA' or owner='user1')
                          loop
                              vsql:=i.v_name;
                             --dbms_output.put_line(vsql);
                               execute immediate vsql;
                            end loop;
                            end;

                            --删除过程和函数
                            BEGIN
                              for i in (select 'drop '|| object_type||' '||owner||'.' || object_name||'' v_name
                                        from dba_objects where (object_type='PROCEDURE' or object_type='FUNCTION' or object_type='PACKAGE') and (owner='SA' or owner='user1')
                                        )
                              loop
                              vsql:=i.v_name;
                             --dbms_output.put_line(vsql);
                               execute immediate vsql;
                              end loop;
                            end;
                      end;
                      /
                      exit;

 

 

相关代码如下:

public async void ExecuteCmd()
      {
          try
          {
              Process[] MyProcess = Process.GetProcessesByName("exp");//获取已经存在的exp.exe和imp.exe进程
              MyProcess.ToList().AddRange(Process.GetProcessesByName("imp"));
              if (MyProcess.Length != 0)
              {
                  for (int i = 0; i < MyProcess.Length; i++)
                  {
                      MyProcess[i].Kill();//关闭已存在的进程
                      MyProcess[i].Dispose();
                  }
              }

              string cmd = txtInput.Text;// strInput;
              System.Diagnostics.Process p = new System.Diagnostics.Process();
              p.StartInfo.FileName = "cmd.exe";// @"D:\MyOracle\Oracle11g\product\11.2.0\dbhome_1\BIN\exp.exe";
                                               //启用操作系统外壳程序执行
              p.StartInfo.UseShellExecute = false;
              p.StartInfo.RedirectStandardInput = true;
              p.StartInfo.RedirectStandardOutput = true;
              p.StartInfo.RedirectStandardError = true;
              p.StartInfo.CreateNoWindow = true;

              p.OutputDataReceived += new DataReceivedEventHandler(P_OutputDataReceived);
              p.ErrorDataReceived += new DataReceivedEventHandler(P_OutputDataReceived);

              p.Start();                                  //设置自动刷新缓冲并更新   
                                                          //p.StandardInput.AutoFlush = true;           //写入命令     
              p.StandardInput.AutoFlush = true;           //写入命令
              p.StandardInput.WriteLine(cmd);                             //p.StandardInput.WriteLine(strInput);
              p.StandardInput.WriteLine("exit");          //等待结束  

              p.BeginOutputReadLine();
              p.WaitForExit();

          }
          catch (Exception ex)
          {
          }
      }

      delegate void AsynUpdateUI(string msg);
      private void UpdataUIStatus(string msg)
      {
          if (InvokeRequired)
          {
              this.Invoke(new AsynUpdateUI(delegate (string argMsg)
              {

                  txtShow.AppendText(argMsg + Environment.NewLine);

              }), msg);
          }
          else
          {
              txtShow.AppendText(msg + Environment.NewLine);
          }
      }
      private void P_OutputDataReceived(object sender, DataReceivedEventArgs e)
      {
          if (e.Data != null)
          {
              string x = e.Data.ToString();
              UpdataUIStatus(x);
          }
      }
      private void btnBAKUP_Click(object sender, EventArgs e)
      {
          Thread t = new Thread(new ThreadStart(this.ExecuteCmd));
          t.Start();
      }

 

点击下载源码

posted on 2017-12-29 10:24  v.e.n.u.s 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/jx270/p/8143153.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows操作系统上,你可以使用命令行工具(cmd)来备份还原Oracle数据库。以下是使用expdp和impdp命令进行备份还原的示例代码: 1. 备份数据库 ``` expdp username/password@database_name directory=backup_directory dumpfile=backup_file.dmp full=y ``` 将上述代码中的`username/password`替换为数据库的用户名和密码,`database_name`替换为数据库的连接名,`backup_directory`替换为备份文件存储的目录,`backup_file.dmp`替换为备份文件的名称。`full=y`表示备份整个数据库。 2. 备份特定表空间 ``` expdp username/password@database_name directory=backup_directory dumpfile=backup_file.dmp tablespaces=tablespace_name ``` 将上述代码中的`tablespace_name`替换为要备份的表空间名称。 3. 还原数据库 ``` impdp username/password@database_name directory=backup_directory dumpfile=backup_file.dmp full=y ``` 将上述代码中的`username/password`替换为数据库的用户名和密码,`database_name`替换为数据库的连接名,`backup_directory`替换为备份文件所在的目录,`backup_file.dmp`替换为备份文件的名称。`full=y`表示还原整个数据库。 请注意,在使用expdp和impdp命令时,需要确保Oracle客户端工具已经正确安装并配置了环境变量。另外,还可以使用其他参数和选项来实现更精细的备份还原操作,例如指定导出和导入的对象、并行处理等。 以上代码仅为示例,请根据实际情况进行适当修改。在进行数据库备份还原操作时,请确保对数据的完整性和安全性有充分的考虑,并在非生产环境中进行测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值