??xml version="1.0" encoding="utf-8" standalone="yes"?>
备䆾Q?br />@echo off 不显C命令行
echo 开始备份表..... 打印信息
D: DOS切换到D: ?br />cd oracle\ora92\bin 切换到cd oracle\ora92\bin目录
exp 用户?密码@数据?file=d:\config_bak.dmp tables=(table1,table2) 备䆾表一表二到d:\config_bak.dmp
echo 备䆾完毕Q?br />
恢复Q?br />@echo off
echo 开始恢复表.....
D:
cd oracle\ora92\bin
imp 用户?密码@数据?file=d:\config_bak.dmp tables=(table1,table2) ignore=y
sqlplus /nolog @oraStartup.sql>>oraStartup.log 调用sql文g
pause 执行完sql文g以后暂停Q看信息
echo 恢复完毕Q?br />
~写oraStartup.sql
conn 用户?密码@数据?as sysdba
select * from table1Q?br />quitQ?br />
执行环境Q可以在SQLPLUS.EXE或者DOSQ命令行Q中执行Q?br /> DOS中可以执行时׃ 在oracle 8i 中?安装目录\ora81\BIN被设|ؓ全局路径Q?br /> 该目录下有EXP.EXE与IMP.EXE文g被用来执行导入导出?br /> oracle用java~写Q我想SQLPLUS.EXE、EXP.EXE、IMP.EXEq俩个文件是被包装后的类文g?br /> SQLPLUS.EXE调用EXP.EXE、IMP.EXE他们所包裹的类Q完成导入导出功能?
下面介绍的是导入导出的实例,向导入导出看实例基本上就可以完成Q因为导入导出很单?br /> 数据导出Q?br /> 1 数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp?br /> exp system/manager@TEST file=d:\daochu.dmp full=y
2 数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 数据库中的表table1中的字段filed1?00"打头的数据导?br /> exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
上面是常用的导出Q对于压~我不太在意Q用winzip把dmp文g可以很好的压~?br /> 不过在上面命令后?加上 compress=y 可以了
数据的导?br /> 1 D:\daochu.dmp 中的数据导入 TEST数据库中?br /> imp system/manager@TEST file=d:\daochu.dmp
上面可能有点问题Q因为有的表已经存在Q然后它报错,对该表就不进行导入?br /> 在后面加?ignore=y 可以了?br /> 2 d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
导入
基本上上面的导入导出够用了。不情冉|是将表彻底删除,然后导入?
Oracle数据库有三种标准的备份方法,它们分别是导出/导入QEXP/IMPQ、热备䆾和冷备䆾。导出备件是一U逻辑备䆾Q冷备䆾和热备䆾是物理备份?
一?导出Q导入(ExportQImportQ?
利用Export可将数据从数据库中提取出来,利用Import则可提取出来的数据送回到Oracle数据库中厅R?
Q?单导出数据(ExportQ和导入数据QImportQ?
Oracle支持三种方式cd的输出:
Q1Q、表方式QT方式Q,指定表的数据导出?
Q2Q、用h式(U方式Q,指定用L所有对象及数据导出?
Q3Q、全库方式(Full方式Q,瘉|据库中的所有对象导出?
数据导入QImportQ的q程是数据导出(ExportQ的逆过E,分别数据文件导入数据库和将数据库数据导出到数据文g?
Q?增量导出Q导?
增量导出是一U常用的数据备䆾ҎQ它只能Ҏ个数据库来实施,q且必须作ؓSYSTEM来导出。在q行此种导出Ӟpȝ不要求回{Q何问题。导出文件名~省为export.dmpQ如果不希望自己的输出文件定名ؓexport.dmpQ必d命o行中指出要用的文件名?
增量导出包括三种cdQ?
Q1Q、“完全”增量导出(CompleteQ?
卛_份三个数据库Q比如:
|
Q2Q、“增量型”增量导?
备䆾上一ơ备份后改变的数据,比如Q?
|
Q3Q、“篏U型”增量导?
累计型导出方式是导出自上ơ“完全”导Z后数据库中变化了的信息。比如:
|
数据库管理员可以排定一个备份日E表Q用数据导出的三个不同方式合理高效的完成?
比如数据库的被封d可以做如下安排:
星期一Q完全备份(AQ?
星期二:增量导出QBQ?
星期三:增量导出QCQ?
星期四:增量导出QDQ?
星期五:累计导出QEQ?
星期六:增量导出QFQ?
星期日:增量导出QGQ?
如果在星期日Q数据库遭到意外破坏Q数据库理员可按一下步骤来回复数据库:
W一步:用命令CREATE DATABASE重新生成数据库结构;
W二步:创徏一个够大的附加回滚?
W三步:完全增量导入AQ?
|
W四步:累计增量导入EQ?
|
W五步:最q增量导入FQ?
|
二?冷备?
冷备份发生在数据库已l正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备䆾时将关键性文件拷贝到另外的位|的一U说法。对于备份Oracle信息而言Q冷备䆾时最快和最安全的方法。冷备䆾的优ҎQ?
Q?是非常快速的备䆾ҎQ只需hӞ
Q?Ҏ归档Q简单拷贝即可)
Q?Ҏ恢复到某个时间点上(只需文件再拯回去Q?
Q?能与归档Ҏ相结合,做数据库“最佳状态”的恢复?
Q?低度l护Q高度安全?
但冷备䆾也有如下不Q?
Q?单独使用Ӟ只能提供到“某一旉点上”的恢复?
Q?再实施备份的全过E中Q数据库必须要作备䆾而不能作其他工作。也是_在冷备䆾q程中,数据库必L关闭状态?
Q?若磁盘空间有限,只能拯到磁带等其他外部存储讑֤上,速度会很慢?
Q?不能按表或按用户恢复?
如果可能的话Q主要看效率Q,应将信息备䆾到磁盘上Q然后启动数据库Q用户可以工作Qƈ备份的信息拯到磁带上Q拷贝的同时Q数据库也可以工作)。冷备䆾中必L贝的文g包括Q?
Q?所有数据文?
Q?所有控制文?
Q?所有联机REDO LOG文g
Q?Init.ora文gQ可选)
值得注意的冷备份必d数据库关闭的情况下进行,当数据库处于打开状态时Q执行数据库文gpȝ备䆾是无效的?
下面是作冷备份的完整例子?
Q?Q?关闭数据?
|
Q?Q?用拷贝命令备份全部的旉文g、重做日志文件、控制文件、初始化参数文g
|
Q?Q?重启Oracle数据?
|
三?热备?
热备份是在数据库q行的情况下Q采用archivelog mode方式备䆾数据库的Ҏ。所以,如果你有昨天夜里的一个冷备䆾而且又有今天的热备䆾文gQ在发生问题Ӟ可以利用这些资料恢复更多的信息。热备䆾要求数据库在Archivelog方式下操作,q要大量的档案I间。一旦数据库q行在archivelog状态下Q就可以做备份了。热备䆾的命令文件由三部分组成:
1Q?数据文g一个表I间一个表I间的备份?
Q?Q?讄表空间ؓ备䆾状?
Q?Q?备䆾表空间的数据文g
Q?Q?回复表空间ؓ正常状?
2Q?备䆾归档log文g
Q?Q?临时停止归档q程
Q?Q?log下那些在archive rede log目标目录中的文g
Q?Q?重新启动archiveq程
Q?Q?备䆾归档的redo log文g
3Q?用alter database bachup controlfile命o来备份控制文?
热备份的优点是:
1Q?可在表空间或数据库文件备䆾Q备份的旉短?
2Q?备䆾时数据库仍可使用?
3Q?可达到秒U恢复(恢复到某一旉点上Q?
4Q?可对几乎所有数据库实体做恢?
5Q?恢复是快速的Q在大多数情况下爱数据库仍工作时恢复?
热备份的不是:
1Q?不能出错Q否则后果严?
2Q?若热备䆾不成功,所得结果不可用于时间点的恢?
3Q?因难于维护,所以要特别仔细心Q不允许“以p|告终”?/p>
参考资料:http://publish.it168.com/2006/0601/20060601045701.shtml?positioncode=1545
http://bbs.zol.com.cn/index20061024/index_124_11079.html
http://community.csdn.net/Expert/TopicView3.asp?id=5276764
http://bbs.gdei.edu.cn/faster.php?id=t-55261
http://www.dvbbs.net/tech/data/2006031819272.asp
http://study.feloo.com/computer/data/Oracle/200509/121026.html
CREATE OR REPLACE FUNCTION GET_NUM(IN_TXT in VARCHAR2) RETURN NUMBER IS
RETRUN_VALUE NUMBER;
BEGIN
select to_number(IN_TXT) into RETRUN_VALUE from dual;
RETURN RETRUN_VALUE;
EXCEPTION
WHEN others
THEN
RETURN null;
END GET_NUM;
/
q样无效数字全{换成 Null,U错Ҏ多了?/p>
写个存储q程试一下:
CREATE OR REPLACE PROCEDURE TestFun IS
v_name varchar2(10);/***** 存放cursor_para中的name *****/
CURSOR cursor_name IS select name from test;
cursor cursor_para(p_num number) is select name from test where num = p_num;
begin
/******* t_name为@环的临时变量******/
FOR t_name IN cursor_name LOOP
if (get_num(t_name.name) is not null) then
open cursor_para(get_num(t_name.name));
fetch cursor_para into v_name;
DBMS_OUTPUT.PUT_LINE('Name:'|| v_name);
close cursor_para;
end if;
END LOOP;
END TestFun;
/
存储q程也用C带参数的游标和游标For循环,E后介绍.
其中试表的创徏Q?br />create table test
(
name varchar2(10),
num number
)
试数据:
insert into test(name) values ('12_');
insert into test(name) values ('123');
2.带参数的游标
与存储过E和函数怼Q可以将参数传递给游标q在查询中用。这对于处理在某U条件下打开游标的情况非常有用。它的语法如下:
CURSOR cursor_name[(parameter[,parameter],...)] IS select_statement;
定义参数的语法如下:
Parameter_name [IN] data_type[{:=|DEFAULT} value]
与存储过E不同的是,游标只能接受传递的|而不能返回倹{参数只定义数据cdQ没有大?
另外可以l参数设定一个缺省|当没有参数g递给游标Ӟ׃用缺省倹{游标中定义的参数只是一个占位符Q在别处引用该参C
一定可靠?/p>
在打开游标时给参数赋|语法如下Q?/p>
OPEN cursor_name[value[,value]....];
3.游标FOR循环
在大多数时候我们在设计E序的时候都遵@下面的步骤:
1、打开游标
2、开始@?/p>
3、从游标中取?/p>
4、检查那一行被q回
5、处?/p>
6、关闭@?/p>
7、关闭游?/p>
可以单的把这一cM码称为游标用于@环。但q有一U@环与q种cd不相同,q就是FOR循环Q用于FOR循环的游标按照正常的声明?/p>
式声明,它的优点在于不需要显式的打开、关闭、取数据Q测试数据的存在、定义存放数据的变量{等。游标FOR 循环的语法如下:
FOR record_name IN
(corsor_name[(parameter[,parameter]...)]
| (query_difinition)
LOOP
statements
END LOOP;
上面的这两个用法也在例子中提CQ?/p>
同理cLQ也可以TO_DATE()函数改进?br />
下面的例子自http://www.nikicn.com/bbs/dispbbs.asp?boardid=23&id=908
没有试Q留作备份之用:
4. Oracle 的Last_Day()函数改写到DB2上:
DROP SPECIFIC FUNCTION LAST_DAYDATE
;
CREATE FUNCTION LAST_DAY(D DATE)
RETURNS DATE
SPECIFIC LAST_DAYDATE
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
CALLED ON NULL INPUT
NO EXTERNAL ACTION
RETURN
D + 1 month - day(D + 1 month) day
;
同理QDB2下的first day:
DROP SPECIFIC FUNCTION FIRST_DAYDATE
;
CREATE FUNCTION FIRST_DAY(D DATE)
RETURNS DATE
SPECIFIC FIRST_DAYDATE
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
CALLED ON NULL INPUT
NO EXTERNAL ACTION
RETURN
D - day(D) day + 1 day
Type 'help' for help.
mysql>
2.在你成功地连接后Q你可以在mysql>提示下打入QUIT随时断开Q?
mysql> QUIT
Bye
你也可以键入control-D断开?
3.本机直接导入数据Q?BR>在DOS下打入命?
D:\>mysql -p databasename<*.sql
回R后输入密码就可以?/P>
4.mysqld dbname < *.sql -uusername -ppassword
用sql文g导入数据