金融高级数据库.ppt
金融高级数据库,周志钊,数据加载,先创建一个表task。CREATE TABLE task(name VARCHAR2(15),job VARCHAR2(15),sal NUMBER(5);Desc task;Select*from task;(此时数据为空)保存控制文件case1.txt如下:,数据加载,load datainfile*into table taskfields terminated by,(name,job,sal)begindatasmith,clerk,3904allen,salesman,2891ward,salesman,3128king,manager,2523,数据加载,在命令提示符后执行语句:C:sqlldr scott/tiger control=case1.txt注意:命令提示符是哪个盘符或路径,则数据加载文件case1.txt必须在此路径下。连接数据库,查看表scott.task的内容:Select*from task;,数据加载,Load data 控制文件的开头部分。Infile表示数据文件位置,*表示数据就在该控制文件内。如果是独立的数据文件,则将infile后面的*改为数据文件名即可。例如:数据放在文件data.txt里,则将加载文件case1.txt改为如下。,数据加载,load datainfile data.txtinto table task2fields terminated by,(name,job,sal)注意:data.txt也要放在命令提示符的相同路径下。,数据加载,Into table 表名 数据要加载到的目标表,该表在执行sqlldr之前必须已创建。如果向已有数据的表中追加数据,则在into前面加append。如需替换数据,在into前面加replace,相当于先delete表中全部数据,再insert。例如,case1.txt改为:,数据加载,load datainfile*append into table taskfields terminated by,(name,job,sal)begindatasmith2,clerk,3904allen2,salesman,2891ward2,salesman,3128king2,manager,2523,数据加载,Field terminated by“,”设置数据部分字符串的分隔符,也可以设置为其他任意可见字符。(name,job,sal)要插入表的列名,应与表中列名完全相同,但顺序可以不同。Begindata 表示以下就是要加载的数据,仅当infile指定为*时需要。,数据加载,(控制文件+数据文件)SQL*Loader=数据库+日志文件+(错误文件+废弃文件),输入,输出,数据加载,将Excel中的数据加载到数据库:创建对应结构的表task3CREATE TABLE task3(no NUMBER(5),name VARCHAR2(15),job VARCHAR2(15),sal NUMBER(5);将Excel中的数据另存为.csv格式。创建加载控制文件case3.txt,数据加载,load datainfile book1.csvinto table task3fields terminated by,(no,name,job,sal),数据加载,C:sqlldr scott/tiger control=case3.txt,数据加载,多个数据文件,要加载到同一张表:因为数据可能来源自多个系统,要导入到数据库的也是多个数据文件。提供的数据文件中的数据存放格式必须完全相同。在控制文件中,由Infile参数依次指定数据文件来源。,数据加载,数据文件为data1.txt和data2.txt,控制文件如下:load datainfile data1.txtinfile data2.txtappend into table task3fields terminated by,(no,name,job,sal),数据备份和恢复,数据库系统在运行中可能发生故障,轻则导致事务异常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中的数据部分或全部丢失。数据库备份与恢复的目的就是为了保证在各种故障发生后,数据库中的数据都能从错误状态恢复到某种逻辑一致的状态。,数据备份和恢复,备份方式:物理备份:将组成数据库的数据文件、重做日志文件、控制文件、初始化参数文件等操作系统文件进行复制,将形成的副本保存到与当前系统独立的磁盘或磁带上。逻辑备份:利用Oracle提供的导出工具(如Expdp,Export)将数据库中的数据抽取出来存放到一个二进制文件中。闪回:读取一定时间内操作过的数据。,数据的备份,根据数据库备份时是否关闭数据库服务器,物理备份分为:冷备份又称停机备份,是指在关闭数据库的情况下将所有的数据库文件复制到另一个磁盘或磁带上去。热备份又称联机备份,是指在数据库运行的情况下对数据库进行的备份。要进行热备份,数据库必须运行在归档日志模式下。,数据的备份,冷备份步骤(以DBA身份登录)查询数据库当前所有文件位置(数据文件、控制文件、日志文件)SQLselect file_name from dba_data_files;SQLselect file_name from dba_data_files;SQLselect member from v$logfile;SQLselect value from v$parameter where name=control _files;关闭数据库 SQLshutdown immediate,数据的备份,备份所有相关的数据文件、联机重做日志文件以及控制文件到备份磁盘。在操作系统中复制、粘帖到备份磁盘。重新启动数据库SQLstartup,数据的备份,数据库完全热备份的步骤:启动SQL*Plus,以SYSDBA身份登录数据库 将数据库设置为归档模式 以表空间为单位,进行数据文件备份 备份控制文件 备份其他物理文件,设置归档/非归档模式,关闭数据库SHUTDOWN IMMEDIATE启动数据库到MOUNT状态STARTUP MOUNT使用ALTER DATABASE ARCHIVELOG语句将数据库设置为归档模式。ALTER DATABASE ARCHIVELOG;或使用ALTER DATABASE NOARCHIVELOG语句将数据库设置为非归档模式。ALTER DATABASE NOARCHIVELOG;打开数据库ALTER DATABASE OPEN;,备份数据文件,查看当前数据库有哪些表空间,以及每个表空间中有哪些数据文件。SELECT tablespace_name,file_name FROM dba_data_files ORDER BY tablespace_name;分别对每个表空间中的数据文件进行备份,其方法为将需要备份的表空间(如USERS)设置为备份状态。ALTER TABLESPACE USERS BEGIN BACKUP;将表空间中所有的数据文件复制到备份磁盘。结束表空间的备份状态。ALTER TABLESPACE USERS END BACKUP;对数据库中所有表空间分别采用该步骤进行备份。,备份控制文件,将控制文件备份为二进制文件。ALTER DATABASE BACKUP CONTROLFILE TO D:ORACLEBACKUPCONTROL.BKP;将控制文件备份为文本文件。ALTER DATABASE BACKUP CONTROLFILE TO TRACE;,数据的恢复,一、非归档模式下数据库的恢复主要指利用非归档模式下的冷备份恢复数据库。步骤为:关闭数据库。SHUTDOWN IMMEDIATE将备份的所有数据文件、控制文件、联机重做日志文件还原到原来所在的位置。重新启动数据库。STARTUP注意非归档模式下的数据库恢复是不完全恢复,只能将数据库恢复到最近一次完全冷备份的状态。,数据的恢复,二、归档模式下数据库的完全恢复。归档模式下数据库的完全恢复是指归档模式下一个或多个数据文件损坏,利用热备份的数据文件替换损坏的数据文件,再结合归档日志文件和联机重做日志文件,采用前滚技术重做自备份以来的所有改动,采用回滚技术回滚未提交的操作,以恢复到数据库故障时刻的状态。,数据的恢复,完全恢复的级别数据库级完全恢复:主要应用于所有或多数数据文件损坏的恢复;表空间级完全恢复:对指定表空间中的数据文件进行恢复;数据文件级完全恢复:是针对特定的数据文件进行恢复。,数据库级完全恢复,如果数据库没有关闭,则强制关闭数据库。SHUTDOWN ABORT利用备份的数据文件还原所有损坏的数据文件。将数据库启动到MOUNT状态。(由于表空间不能在数据库打开后进行恢复,因此只能在数据库处于装载状态时进行恢复。)STARTUP MOUNT执行数据库恢复命令。RECOVER DATABASE打开数据库。ALTER DATABASE OPEN;,表空间级完全恢复,以EXAMPLE表空间的数据文件example01.dbf损坏为例模拟表空级的完全恢复。数据库处于装载状态下的恢复 数据库处于打开状态下的恢复,表空间级完全恢复,数据库处于装载状态下的恢复:如果数据库没有关闭,则强制关闭数据库。SHUTDOWN ABORT利用备份的数据文件example01.dbf还原损坏的数据文件example01.dbf。将数据库启动到MOUNT状态。STARTUP MOUNT执行表空间恢复命令。RECOVER TABLESPACE EXAMPLE打开数据库。ALTER DATABASE OPEN;,表空间级完全恢复,数据库处于打开状态下的恢复:如果数据库已经关闭,则将数据库启动到MOUNT状态。STARTUP MOUNT将损坏的数据文件设置为脱机状态。ALTER DATABASE DATAFILE D:oracleproduct10.2.0oradataorcl EXAMPLE01.DBF OFFLINE;打开数据库。ALTER DATABASE OPEN;,表空间级完全恢复,将损坏的数据文件所在的表空间脱机。ALTER TABLESPACE EXAMPLE OFFLINE FOR RECOVER;利用备份的数据文件example01.dbf还原损坏的数据文件example01.dbf。执行表空间恢复命令。RECOVER TABLESPACE EXAMPLE;将表空间联机。ALTER TABLESPACE EXAMPLE ONLINE;如果数据文件损坏时数据库正处于打开状态,则可以直接执行步骤(4)(7)。,闪回技术,Flashback可以用来进行数据比对,或修正意外提交造成的错误数据。能够实现快速恢复被删除的表,甚至对整个数据库进行时间点上的恢复(前提是数据库正常,没崩溃)。闪回的功能回到过去。,闪回技术,闪回查询(Flashback Query):查询过去某个时间点或某个SCN(system change number)值时表中的数据信息,主要用于修复误操作的数据。闪回表(Flashback Table):将表恢复到过去的某个时间点或某个SCN值时的状态;闪回删除(Flashback Drop):将已经删除的表及其关联对象恢复到删除前的状态;闪回数据库(Flashback Database):将数据库恢复到过去某个时间点或某个SCN值时的状态。,闪回查询,Flashback Query本身并不恢复任何操作或修改,而是让用户能查询到指定时间点的表中的记录,即看到过去。看到过去之后,可用insert table select或create table as select恢复,回到原来。,闪回查询,闪回查询可以返回过去某个时间点已经提交事务操作的结果。基本语法:SELECT column_name,FROM table_nameAS OF TIMESTAMP|SCN expressionWHERE condition 基于AS OF TIMESTAMP的闪回查询 基于AS OF SCN的闪回查询,闪回查询,建立表task如下:,闪回查询,删除部分记录:SQLdelete task where no7000;,闪回查询,使用Flashback Query,查询5分钟前表中的数据。SQLselect*from task as of timestamp sysdate-5/1440;,闪回查询,Sysdate是系统函数,用来取得当前系统时间,sysdate-5/1440表示以分钟为单位(6024=1440分钟),得出距当前时间5分钟前的记录。用insert table select将删除掉的数据快速恢复:,闪回查询,SQLinsert into task select*from task as of timestamp sysdate-5/1440 where noselect*from task;,闪回查询,闪回查询,基于SCN的查询:授予用户使用DBMS_FALSHBACK包的权限:C:sqlplus sys/shfc as sysdbaSQLgrant execute on dbms_flashback to scott;切换到用户scott.,闪回查询,使用DBMS_FALSHBACK包获取当前的SCN,然后执行删除数据的操作。SQLselect dbms_flashback.get_system_change_number from dual;,闪回查询,SQLdelete task where noselect*from task as of scn 3234032;执行insert,将删除的数据恢复回表task(回到原来)。,闪回查询,SQLinsert into task select*from task as of scn 3234032 where no7000;查询恢复后的数据表:Select*from task;,闪回查询,