C#程序导入导出数据库

oracle 行指令

//通过cmd调用oracle行指令导入导出数据库
//通过directory导出数据库
//创建directory https://blog.csdn.net/sgs595595/article/details/81066685
string expdpcmd = "expdp user_test/user_pass@xe directory=DATA_PUMP_DIR dumpfile=EXPDP_local.dmp "+
                "logfile=EXPDP_local.log tables=TABLENAME1,TABLENAME2"; 
// 通过directory导入数据库
string impcmd = "impdp user_test_rds/user_pass_rds@rds_servicename logfile=EXPDP_rds_rds.DMP.log "+
                "dumpfile=EXPDP_rds_rds.DMP directory=DATA_PUMP_DIR TABLE_EXISTS_ACTION=APPEND tables=TABLENAME1,TABLENAME2";                
process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.WorkingDirectory = ".";
process.StartInfo.Arguments = "/k " + expdpcmd;
process.StartInfo.CreateNoWindow = false;
process.StartInfo.UseShellExecute = true;
process.Start();

oracle SQL文件

//添加日志委托
//启动cmd进程
processrds = new Process();
processrds.StartInfo.FileName = "cmd.exe";
processrds.StartInfo.WorkingDirectory = ".";
processrds.StartInfo.CreateNoWindow = true;
processrds.StartInfo.UseShellExecute = false;
processrds.StartInfo.RedirectStandardInput = true;
processrds.StartInfo.RedirectStandardOutput = true;
processrds.StartInfo.RedirectStandardError = true;
//注册进程内置事件
processrds.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
processrds.EnableRaisingEvents = true;
//注册进程内置事件
processrds.Exited += new EventHandler(CmdProcess_Exited);
processrds.Start();
// EXPDP_rds_rds.DMP,user_pass_rds是oracle_db_copy_to_rds.sql的参数
string copycmd = "sqlplus -S local_user_sys/local_pass_system@xe as sysdba @C:\Sql\oracle_db_copy_to_rds.sql EXPDP_rds_rds.DMP user_pass_rds";
processrds.StandardInput.WriteLine(copycmd);
processrds.StandardInput.WriteLine("exit");
processrds.BeginOutputReadLine();

// 实现内置事件方法
private void CmdProcess_Exited(object sender, EventArgs e)
{
    if (processrds == null) return;
   
    Console.WriteLine("CmdProcess Exited");        
    processrds.Close();
}
private void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    if (!String.IsNullOrEmpty(e.Data)) return;
    this.Invoke(ReadStdOutput, new object[] { e.Data });
}

//声明委托
public delegate void DelReadStdOutput(string result);
//定义事件
public event DelReadStdOutput ReadStdOutput;
//注册事件, 事件类型自动实现注册删除
ReadStdOutput += new DelReadStdOutput(ReadStdOutputAction);
//实现事件方法
private void ReadStdOutputAction(string result)
{
    if (!String.IsNullOrEmpty(result)) return;
    Console.WriteLine(result);
}
--File: C:\Sql\oracle_db_copy_to_rds.sql
SET SERVEROUTPUT ON SIZE 999999;
WHENEVER SQLERROR EXIT FAILURE ROLLBACK;

DECLARE
script_name   CONSTANT VARCHAR2 (50) := 'oracle_db_copy_to_rds.sql ';
BEGIN
    DBMS_OUTPUT.new_line ();
    DBMS_OUTPUT.put_line ('File ' || script_name || 'started at ' || TO_CHAR (CURRENT_DATE, 'MON-DD-YYYY HH24:MI:SS'));

    EXECUTE IMMEDIATE 'create public database link to_rds connect to user_test_rds identified by &2
    using '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=remote.server.ip)(PORT=1521))(CONNECT_DATA=(SID=xe)))';

    DBMS_FILE_TRANSFER.PUT_FILE(
        source_directory_object       => 'DATA_PUMP_DIR',
        source_file_name              => 'EXPDP_local.DMP',
        destination_directory_object  => 'DATA_PUMP_DIR',
        destination_file_name         => '&1', 
        destination_database          => 'to_rds'
    );

DBMS_OUTPUT.put_line ('File ' || script_name || ' ended at ' || TO_CHAR (CURRENT_DATE, 'MON-DD-YYYY HH24:MI:SS'));
END;
/
commit;
exit; 

猜你喜欢

转载自blog.csdn.net/sgs595595/article/details/85244292