对oracle数据库中的数据表进行备份

  1. public ActionForward backUpAction(ActionMapping mapping, ActionForm form,   
  2.             HttpServletRequest request, HttpServletResponse response)   
  3.             throws Exception {   
  4.        
  5.            Calendar cDay = Calendar.getInstance();   
  6.            SimpleDateFormat myf = new SimpleDateFormat("yyyyMMddHHmmss");   
  7.            String day = myf.format(cDay.getTime());   
  8.            // 获得Constant中定义的数据库备份文件存放路径,格式如:   
  9.           // public static final String DataBaseBackUpPath = "D://sOADB//";   
  10.     String outputFile = Constant.DataBaseBackUpPath;   
  11.            // 如果服务器端硬盘上不存在outputFile目录,则创建这个目录   
  12.            File mydir = new File(outputFile);   
  13.            if (!(mydir.exists())) {   
  14.                mydir.mkdir();   
  15.            }   
  16.         
  17.            // 备份文件名   
  18.            String fileName = "soa" + day + ".dmp";   
  19.            // 将备份好的数据库文件放在服务器端的outputFile目录下   
  20.               
  21.            // 得到数据库的连接信息   
  22.         
  23.             // 得到物理路径,取得applicationContext.xml中数据库定义,   
  24.     //如url,usrname,password,O/R映射文件等内容   
  25.      //      ServletContext m_application = this.getServlet().getServletContext();   
  26.     //       String path = m_application.getRealPath("/");   
  27.      //      String filename = path + "WEB-INF//applicationContext.xml";   
  28.           // WriteXMLWithDom wxf = new WriteXMLWithDom();   
  29.         //   String[] str = wxf.GetOralAddrWithDom(filename);   
  30.     /*       if (str[0].equalsIgnoreCase("")) {  
  31.                return mapping.findForward("failure");  
  32.            }*/  
  33.            // str[1] 用户名  ,[2] 用户密码 ,   
  34.            // 服务器地址,[0]   
  35.            String command = "exp  "+"bgxx_name"+"/"+"bgxx"+"@"+"bgxx"+" file=" + outputFile+ fileName;   
  36.            Runtime rt = Runtime.getRuntime();   
  37.            Process process=null;   
  38.            try {   
  39.         
  40.                 process=rt.exec(command);   
  41.                //rt.exec(command);   
  42.                 process.waitFor();   
  43.                // 假等待一下,目的是让其能在文件列表中列出,可以process.destroy()得到   
  44.                //Thread.sleep(20000);   
  45.                //rt.freeMemory();   
  46.                  
  47.                 process.destroy();   
  48.            } catch (Exception e) {   
  49.                  //捕捉异常   
  50.               // String errorSORT = Constant.errorBeifen;   
  51.                request.setAttribute("ERRORSORT""坏了");   
  52.                   
  53.                String error = "数据库备份操作失败,请稍候再试! ";   
  54.                request.setAttribute("PUBLICINFERROR", error);   
  55.                return mapping.findForward("backUp");   
  56.            }   
  57.            // p.destroy();   
  58.           
  59.            String success="数据库备份成功,您的数据已经备份在!"+ Constant.DataBaseBackUpPath;   
  60.           request.setAttribute("PUBLICINFERROR", success);   
  61.            return mapping.findForward("backUp");   
  62.         }  
///
create or replace procedure backup_table_to_file  /*功能:将ORACLE的任意表数据导出(标准格式) */
(
	v_tablename	varchar2,	/*需要导出的表名*/
	v_path		varchar2,	/*服务器上导出数据文件的目录*/
	v_string	varchar2,	/*服务器上导出数据文件的文件名*/
	v_where		varchar2,	/*查询条件*/
	v_flag		varchar2, 	/*写数据文件的方式 w:重写		a:追加*/
	outflag out varchar2    /*返回处理结果 0 成果、1 写入目录有误、2 表名有误、3 写入目录不能为空、4 写入文件方式有误、5 查询条件有误、6 其他错误*/
)
is
	file_handle utl_file.file_type;
	path_notinput_exception EXCEPTION;
	table_notfind_exception EXCEPTION;
	write_type_exception EXCEPTION;
	type ref_cursor_type is REF CURSOR;
	cursor_select ref_cursor_type;
	outputline varchar2(1000) ;
	select_cname varchar2(1000) ;
	w_flag varchar2(10);
	get_cname varchar2(1000) ;
	put_cname varchar2(1000) ;
	temp varchar2(1000) ;
	resault varchar2(1000) ;
	filepath varchar2(100) ;
	filename varchar2(100) ;
	i integer;
begin
	outflag :='0';
	IF (v_path is null) THEN     --初始化服务器文件夹
		RAISE path_notinput_exception;
	ELSE
		filepath := rtrim(trim(v_path),'/');
	END IF;                      --初始化服务器文件夹
	get_cname := '';
	temp := nls_upper(v_tablename);
	if (v_flag is null) then    --初始化写文件方式
		w_flag := 'w';
	else
		w_flag := v_flag;
	end if;                     --初始化写文件方式
	if w_flag in ('W','w','A','a') then
		select_cname := 'select cname from col where tname = '||''''||temp||'''';
		OPEN cursor_select for select_cname;
		FETCH cursor_select into get_cname;
		IF (get_cname is null) THEN
			RAISE table_notfind_exception;
		END IF;
		put_cname := ''''||'"'||''''||'||'||get_cname||'||'||''''||'"'||'''';
		WHILE cursor_select%FOUND LOOP
			FETCH cursor_select into get_cname;
			EXIT WHEN cursor_select%NOTFOUND;
			put_cname :=put_cname ||'||'||''''||','||''''||'||'||''''||'"'||''''||'||'||get_cname||'||'||''''||'"'||'''';
		END LOOP;
		CLOSE cursor_select;
		IF (v_string is null) then
			select_cname := 'select to_char(sysdate,'||''''||'yyyymmdd'||''''||') from DUAL';
			OPEN cursor_select for select_cname;
			FETCH cursor_select into filename;
			CLOSE cursor_select;
			filename := v_tablename||'.'||filename||'.txt';
		ELSE
			filename := v_string;
		END IF;
	   	file_handle :=utl_file.fopen(filepath,filename,w_flag);
        select_cname := 'select '||put_cname||' from '||temp||' '||v_where;
        resault := '';
        OPEN cursor_select for select_cname;
		FETCH cursor_select into resault;
		WHILE cursor_select%FOUND LOOP
			outputline := resault;
		    utl_file.put_line(file_handle,outputline);
			FETCH cursor_select into resault;
		END LOOP;
		CLOSE cursor_select;
		utl_file.fclose(file_handle);
	ELSE
		RAISE write_type_exception;
	end if;
exception
	when utl_file.invalid_path then
		outflag :='1';
		--raise_application_error(-20001,'错误:主机的写入文件目录有误!');
	when table_notfind_exception then
		outflag :='2';
		--raise_application_error(-20002,'错误:输入的表名有误!');
    when path_notinput_exception then
    	outflag :='3';
		--raise_application_error(-20003,'错误:服务器的写入文件目录为必输项!');
	when write_type_exception then
    	outflag :='4';
		--raise_application_error(-20004,'错误:写入文件方式有误!');
	when others then
		if sqlcode like '-9%' then
		outflag :='5';
		--raise_application_error(-20005,'错误:查询条件有误!');
		else
		outflag :='6';
		raise_application_error(sqlcode,sqlerrm);
		end if;
end backup_table_to_file;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值