当前位置:文档之家› Oracle数据库备份与恢复总结

Oracle数据库备份与恢复总结

Oracle数据库备份与恢复总结
Oracle数据库备份与恢复总结

Oracle数据库备份与恢复总结

1. EXP/IMP (导出与导入) (6)

1.1基本命令 (6)

1.获取帮助 (6)

2.三种工作方式 (6)

3.三种模式 (7)

1.2高级选项 (7)

1.分割成多个文件 (7)

2.增量导出/导入 (8)

3.以SYSDBA进行导出/导入 (8)

4.表空间传输(速度快) (8)

1.3优化 (10)

1.加快exp速度 (10)

2.加快imp速度 (10)

3.通过unix/Linux PIPE管道加快exp/imp速度 (10)

4.全库导入的一般步骤 (12)

1.4常见问题 (12)

1.字符集问题 (12)

2.版本问题 (13)

2. SQL*LOADER (14)

2.1基本知识 (14)

1.命令格式 (14)

2.控制文件 (14)

3.数据文件 (15)

4.坏文件 (16)

5.日志文件及日志信息 (16)

2.2高级选项 (16)

1. Conventional Path Load与Direct Path Load (16)

2. SPOOL导出文本数据方法 (16)

2.3脚本 (17)

1.将表中数据记录导出为字段值用分隔符'|'分开的.dat文件 (17)

2.将数据导入到相应表中 (18)

3. OS备份/用户管理的备份与恢复(USER MANAGED BACKUP AND RECOVERY) (20)

3.1相关设置 (20)

3.1.1设置ARCHIVELOG与NONARCHIVELOG模式 (20)

3.1.2 LOGGING与NOLOGGING (21)

3.1.3归档路径 (21)

3.2 NONARCHIVELOG模式 (22)

3.2.1脱机冷备与恢复 (22)

3.2.2案 (22)

3.3 ARCHIVELOG模式 (26)

3.3.1脱机冷备与恢复 (26)

3.3.2联机热备 (27)

3.3.3联机热备的恢复 (30)

3.3.3.1完全恢复 (30)

3.3.3.2不完全恢复 (30)

3.4分类案例 (31)

3.4.1控件文件的备份与恢复 (31)

3.4.2联机日志文件的备份与恢复 (32)

3.4.3回滚数据文件的恢复 (32)

3.4.5临时数据文件的恢复 (33)

4. RMAN(备份与恢复管理器) (34)

4.1基本知识 (34)

4.1.1 RMAN的组件、概念 (34)

4.1.2 RMAN的使用:命令行接口与脚本 (36)

1.使用不带恢复目录的RMAN (36)

2.使用带恢复目录的RMAN (36)

3.命令行接口 (36)

4.使用脚本 (37)

5.运行OS命令 (37)

6.执行SQL语句 (37)

4.2 RMAN的配置 (38)

4.2.1建立Recovery Catalog恢复目录 (38)

4.2.2查看RMAN的默认设置SHOW命令 (38)

4.2.3配置RMAN的默认设置 (38)

1.配置备份集文件的格式(format) (38)

2.配置默认IO设备类型( device type ) (39)

3.配置自动分配的通道(Chanel ) (39)

4.配置默认的保存策略( Retention Policy) (39)

5.配置多个备份的拷贝数目( backup copies ) (40)

6.设置并行备份(ARALLELISM ) (40)

7.设置控制文件自动备份(autobackup on) (40)

8.设置备份优化选项( optimization ) (41)

4.2.4 RMAN会话的设置 (41)

4.3 C OPY镜像拷贝与恢复 (41)

4.3.1备份 (42)

4.3.2恢复 (42)

4.4 B ACKUP备份与恢复 (43)

4.4.1 BACKUP备份命令选项 (43)

设置标记(TAG) (43)

只备份新增部分 (43)

备份控制文件同时备份SPFILE (43)

备份归档日志(9i) (43)

备份完后删除归档日志 (44)

修改备份集的保存策略 (44)

重写configure exclude / noexclude (44)

跳过机的、不可存取的或者只读的数据文件 (44)

强制备份只读的数据文件 (44)

备份指定周期内没有备份的数据文件 (44)

在备份操作期间检查逻辑讹误 (44)

4.4.2 RESTORE/RECOVER恢复命令选项 (44)

数据库恢复 (44)

表空间恢复 (45)

只读表空间的恢复 (45)

恢复SPFILE/控制文件 (45)

归档重做日志的还原 (45)

数据文件副本还原 (45)

还原检查与恢复测试 (45)

从指定的tag恢复: (46)

不完全恢复的还原: (46)

块级别的恢复 (46)

4.4.3非归档模式下的BACKUP备份与恢复 (46)

4.4.3.1全库备份 (46)

4.4.3.2全库备份的恢复 (47)

4.4.3.3表空间备份 (47)

4.4.3.4表空间备份的恢复 (47)

4.4.3.5备份控制文件 (48)

4.4.4归档模式下的BACKUP备份与完全恢复 (48)

4.4.4.1整库备份与恢复 (48)

4.4.4.3表空间的备份与恢复 (49)

4.4.4.3数据文件的备份与恢复 (50)

4.4.4.4归档重做日志的备份与恢复 (50)

4.4.4.5联机日志的备份 (51)

4.4.4.6控制文件和服务器参数文件的备份与恢复 (52)

4.4.4.7备份集的备份的备份与恢复 (53)

4.4.5归档模式下的不完全恢复 (54)

4.4.5.1基于SCN的恢复 (54)

4.4.5.2基于时间的恢复 (54)

4.4.5.3基于日志序列的恢复 (55)

4.5. RMAN查看信息L IST与R EPORT (55)

4.5.1恢复目录相关视图 (55)

4.5.2 RMAN动态性能视图 (56)

4.5.4 Report (58)

4.6 RMAN的管理与维护 (59)

4.6.1加入目录数据库 (59)

4.6.2恢复目录的建立、升级与删除 (59)

4.6.3同步或重置CROSSCHECK命令(交叉校验) (59)

4.6.4修改备份的可用状态、保存策略Change命令 (61)

4.6.5查看与删除过时的备份信息 (61)

4.6.6恢复目录记录的删除 (62)

4.6.7备份RMAN数据库 (62)

4.6.8备份检查验证备份的可恢复性 (62)

4.6.9登记目标数据库: (63)

4.6.10注销数据库 (63)

4.6.11重新启动备份 (63)

4.6.12脚本及自动运行 (63)

4.7高级主题 (64)

4.7.1使用RMAN备份集恢复DB到其他机器(1常规方法) (64)

1.准备工作,配置目标DB环境 (64)

2.目标DB在nomount状态下恢复pfile和controlfile (64)

3.启动目标DB到mount,在目标DB上Restore和Recover (64)

4.Resetlogs打开目标DB (65)

5.重建临时表空间,重建密码文件,立即备份数据库 (65)

4.7.2使用RMAN备份集恢复DB到其他机器(2复制方法) (65)

1.准备工作,配置副本DB环境 (65)

2.启动副本数据库到nomount下,目录数据库必须MOUNT (或OPEN) (65)

3.运行RMAN,分别连接主数据库与副本数据库实例 (65)

4.运行复制命令 (66)

5.重建临时表空间,立即备份数据库 (66)

附:Duplicate复制命令的一些高级用法: (66)

4.7.3表空间时间点恢复(TSPITR) (67)

1.验证表空间的可传输性 (68)

2.准备TSPITR的辅助实例(AUXILIARY INSTANCE) (68)

3.执行实际的TSPITR (69)

4.执行TSPITR后的操作 (70)

4.7.4块媒体恢复Block Media Recovery (BMR) (70)

4.7.5使用恢复目录恢复前一个对应物 (71)

4.7.6 RMAN增量备份 (74)

4.7.7 RMAN备份的优化 (75)

4.7.8 DBMS_BACKUP_RESTORE包 (76)

. FLASHBACK (78)

5.1 9I F LASHBACK简介 (78)

5.1.1原理 (78)

5.1.2一些限制 (78)

5.1.4启用或禁用flashback查询 (78)

5.1.5示: (79)

5.2 10G F LASHBACK的增强 (79)

6. LOGMINER (81)

6.1 L OG M INER的用途 (81)

6.2安装L OG M INER (81)

6.3基本对象 (82)

6.4使用L OG M INER进行分析 (82)

6.4.1设定用于LogMiner分析的日志文件存放的置 (82)

6.4.2生成数据字典文件 (83)

6.4.3建立日志分析表 (83)

6.4.4添加用于分析的日志文件 (83)

6.4.6查看日志分析的结果 (84)

6.4.7结束LogMiner的分析 (84)

Oracle数据库备份与恢复总结

关于Oracle数据库的备份与恢复,网上有不少文章。经过了不少项目,以及我在给公

司做培训时也有一些总结,现在总结在一贴出来。以下方法,有一些可能不能完全归纳为

备份与恢复,但是作为开发DBA,有时也是很有用的。对于生产库,一般还是推荐使用ARCHIVELOG模式下的OS备份或RMAN方法,要求比较高的可能还必须用到RAC等并

行处理的架构,这可是一个很大的主题了,在此不作讨论。

这里列出来,只是自己的一个备忘录以备需要时查看,有好多不全面或者不当的地方,

欢迎各位补充、批评指正!同时,本文借鉴了网上的一些相关文章,希望大侠们不要见怪,

此处一并谢过。

◇exp/imp (导出与导入装库与卸库)

◇SQL*Loader

◇User Managed Backup and Recovery (用户管理的备份与恢复)

◇RMAN

◇Flashback

◇LogMiner

◇备份与恢复的规划

1. exp/imp (导出与导入装库与卸库)

1.1基本命令

1.获取帮助

$ exp help=y

$ imp help=y

2.三种工作方式

(1)交式方式

$ exp //然后按提示输入所需要的参数

(2)命令行方式

$ exp user/pwd@dbname file=/oracle/test.dmp full=y //命令行中输入所需的参数

(3)参数文件方式

$ exp parfile=username.par //在参数文件中输入所需的参数

参数文件username.par内

userid=username/userpassword

buffer=8192000

compress=n

grants=y

file=/oracle/test.dmp

full=y

3.三种模式

(1)表方式,将指定表的数据导出/导入。

导出:

导出一张或几张表:

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1,table2

导出某张表的部分数据

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1 query=\"where col1=\'?\' and col2 \

导入:

导入一张或几张表

$ imp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1,table2 fromuser=dbuser touser=dbuser2 commit=y ignore=y

(2)用户方式,将指定用户的所有对象及数据导出/导入。

导出:

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=(xx,yy)

只导出数据对象,不导出数据(rows=n )

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=user rows=n

导入:

$ imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser

touser=dbuser2

commit=y ignore=y

(3)全库方式,将数据库中的所有对象导出/导入

导出:

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log full=y commit=y ignore=y

导入:

$ imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2

1.2高级选项

1.分割成多个文件

以多个固定大小文件方式导出:这种做法通常用在表数据量较大,单个dump文件可能

会超出文件系统的限制的情况

$ exp user/pwd file=1.dmp,2.dmp,3.dmp,? filesize=1000m log=xxx.log full=y 以多个固定大小文件方式导入

$ imp user/pwd file=1.dmp,2.dmp,3.dmp,?filesize=1000m tables=xxx fromuser=dbuser touser=dbuser2 commit=y ignore=y

2.增量导出/导入

// oracle 9i以后exp不再支持inctype

必须为SYS或SYSTEM才可执行增量导出导入

增量导出:包括三个类型:

(1)"完全"增量导出(Complete)//备份整个数据库

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=complete

(2)"增量型"增量导出导出上一次备份后改变的数据。

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=incremental

(3)"累计型"增量导出(Cumulative)只导出自上次"完全"导出之后数据库中变化

了的信息。

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=cumulative

增量导入:

$ imp usr/pwd FULL=y inctype=system/restore/inctype

其中:

SYSTEM:导入系统对象

RESTORE:导入所有用户对象

3.以SYSDBA进行导出/导入

1.用于Oracle技术支持

2.用于表空间传输

例:

$ imp \'usr/pwd@instance as sysdba\' tablespaces=xx

transport_tablespace=y

file=xxx.dmp datafiles=xxx.dbf

$ imp file=expdat.dmp userid="""sys/password as sysdba""" transport_tablespace=y "datafile=(c:tempapp_data,c:tempapp_index)"

4.表空间传输(速度快)

表空间传输是8i新增加的一种快速在数据库间移动数据的一种办法,是把一个数据库上的格式数据文件附加到另外一个数据库中,而不是把数据导出成dmp文件,这

在有些时候是非常管用的,因为传输表空间移动数据就象复制文件一样快。

1.关于传输表空间有一些规则(10g前):

◇源数据库和目标数据库必须运行在相同的硬件平台上。

◇源数据库与目标数据库必须使用相同的字符集。

◇源数据库与目标数据库一定要有相同大小的数据块

◇目标数据库不能有与迁移表空间同名的表空间

◇SYS的对象不能迁移

◇必须传输自包含的对象集

◇有一些对象,如物化视图,基于函数的索引等不能被传输

(同字节序文件的跨平台可以用更换数据文件的文件头的方法)

(10g支持跨平台的表空间传输,只要操作系统字节顺序相同,就可以进行表空间

传输。需要使用RMAN转换文件格式,)

2.检测一个表空间是否符合传输标准的方法:

SQL > exec sys.dbms_tts.transport_set_check('tablespace_name',true);

SQL > select * from sys.transport_set_violations;

如果没有行选择,表示该表空间只包含表数据,并且是自包含的。对于有些非自包

含的表空间,如数据表空间和索引表空间,可以一传输。

3.简要使用步骤:

如果想参考详细使用方法,也可以参考ORACLE联机帮助。

1.设置表空间为只读(假定表空间名字为APP_Data和APP_Index)

SQL > alter tablespace app_data read only;

SQL > alter tablespace app_index read only;

2.发出EXP命令

SQL> host exp userid="""sys/password as sysdba""" transport_tablespace=y

tablespaces=(app_data, app_index)

以上需要注意的是

?为了在SQL中执行EXP,USERID必须用三个引号,在UNIX中也必须注意避免"/"的使用

?在816和以后,必须使用sysdba才能操作

?这个命令在SQL中必须放置在一行(这里是因为显示问题放在了两行)

3.拷贝.dbf数据文件(以及.dmp文件)到另一个地点,即目标数据库

可以是cp(unix)或copy(windows)或通过ftp传输文件(一定要在bin方式)

4.把本地的表空间设置为读写

$ alter tablespace app_data read write;

$ alter tablespace app_index read write;

5.在目标数据库附加该数据文件(直接指定数据文件名)

(表空间不能存在,必须建立相应用户名或者用fromuser/touser)

$ imp file=expdat.dmp userid="""sys/password as sysdba"""

transport_tablespace=y datafiles=("c:\app_data.dbf,c:\app_index.dbf")

tablespaces=app_data,app_index tts_owners=hr,oe

6.设置目标数据库表空间为读写

$ alter tablespace app_data read write;

$ alter tablespace app_index read write;

1.3优化

1.加快exp速度

加大large_pool_size,可以提高exp的速度

采用直接路径的方式(direct=y),数据不需要经过内存进行整合和检查.

设置较大的buffer,如果导出大对象,小buffer会失败。

export文件不在ORACLE使用的驱动器上

不要export到NFS文件系统

UNIX环境:用管道模式直接导入导出来提高imp/exp的性能

2.加快imp速度

建立一个indexfile,在数据import完成后在建立索引

将import文件放在不同的驱动器上

增加DB_BLOCK_BUFFERS

增加LOG_BUFFER

用非归档方式运行ORACLE:ALTER DATABASE NOARCHIVELOG;

建立大的表空间和回滚段,OFFLINE其他回滚段,回滚段的大小为最大表的1/2

使用COMMIT=N

使用ANALYZE=N

单用户模式导入

UNIX环境:用管道模式直接导入导出来提高imp/exp的性能

3.通过unix/Linux PIPE管道加快exp/imp速度

通过管道导出数据:

1.通过mknod -p建立管道

$ mknod /home/exppipe p //在目录/home下建立一个管道exppipe注意参数p

2.通过exp和gzip导出数据到建立的管道并压缩

$ exp test/test file=/home/exppipe & gzip < /home/exppipe > exp.dmp.gz

$ exp test/test tables=bitmap file=/home/newsys/test.pipe &

gzip < /home/newsys/test.pipe > bitmap.dmp.gz

3.导出成功完成之后删除建立的管道

$ rm -rf /home/exppipe

导出脚本:

###UNIX下ORACLE数据库通过PIPE管道进行备份

###### using "export" and "tar" command to bakup oracle datebase #######

trap "" 1 #nohup

LOGFILE=/opt/bakup/log/bakup_ora.log

export LOGFILE

DUMPDIR=/archlog_node1

export DUMPDIR

exec >$LOGFILE 2>&1

echo

echo ' Begin at ' `date`

echo

# clear old result file

cd $DUMPDIR

if [ -f exp.dmp.Z ]

then

echo "clear old result file"

rm exp.dmp.Z

fi

# make pipe

mkfifo exp.pipe

chmod a+rw exp.pipe

# gain the dmp.Z file

compress < exp.pipe > exp.dmp.Z &

su -u oracle -c "exp userid=ll/ll file=$DUMPDIR/exp.pipe full=y buffer=20000000"

echo

echo ' exp end at '`date`

echo

# rm pipe

rm exp.pipe

# tar the dmp.Z file to tape

mt -f /dev/rmt/0 rew

tar cvf /dev/rmt/0 exp.dmp.Z

echo

echo ' tar end at '`date`

echo

通过管道导入生成的文件:

1.通过mknod -p建立管道

$ mknod /home/exppipe p

2.导入生成的压缩文件

$ imp test/test file=/home/exppipe fromuser=test touser=macro &

gunzip < exp.dmp.gz > /home/exppipe

3.删除管道

$ rm -fr /home/exppipe

4.全库导入的一般步骤

注意:在导出时,需要通过toad或其他工具提取源数据库创建主键和索引的脚本

1.先全库加rows=n把结构导进去

$ imp system/manager file=exp.dmp log=imp.log full=y rows=n indexes=n

2.使业务用户的触发器失效/删除主键和唯一索引

spool drop_pk_u.sql

select 'alter table '||table_name||' drop constraint '||constraint_name||';'

from user_constraints

where constraint_type in ('P','U');

/

spool off

spool disable_trigger.sql

select 'alter trigger '||trigger_name||' disable;'

from user_triggers;

/

spool off

@drop_pk_u.sql

@disable_trigger.sql

3.以ignore=y全库导入

$ imp system/manager file=exp.dmp log=imp.log full=y ignore=y

4.通过toad或其他工具提取源数据库创建主键和索引的脚本,在目标数据库中创建主键和索引。使触发器生效。

1.4常见问题

1.字符集问题

ORACLE多国语言设置是为了支持世界范围的语言与字符集,一般对语言提示,货币形式,排序方式和CHAR,VARCHAR2,CLOB,LONG字段的数据的显示等有效。

ORACLE的多国语言设置最主要的两个特性就是国家语言设置与字符集设置,国家语言设置决定了界面或提示使用的语言种类,字符集决定了数据库保存与字符集有关数据(如文本)时候的编码规则。

ORACLE字符集设定,分为数据库字符集和客户端字符集环境设置。在数据库端,

字符集在创建数据库的时候设定,并保存在数据库props$表中。

在客户端的字符集环境比较简单,主要就是环境变量或注册表项NLS_LANG,注意NLS_LANG的优先级别为:参数文件<注册表<环境变量

字符集和服务器端字符集不一样,而且字符集的转换也不兼,那客户端的数据显示与导出/导入的与字符集有关的数据将都是乱码。

使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。这里需要一个2进制文件编辑工具即可,如uedit32。用编辑方式打开导出的dmp文件,获

2、3字节的内,如00 01,先把它转换为10进制数,为1,使用函数数琀NLS_CHARSET_NAME即可获得该字符集:

SQL> select nls_charset_name(1) from dual;

NLS_CHARSET_NAME(1)

-------------------

US7ASCII

可以知道该dmp文件的字符集为US7ASCII,如果需要把该dmp文件的字符集换成ZHS16GBK,则需要用NLS_CHARSET_ID获取该字符集的编号:

SQL> select nls_charset_id('zhs16gbk') from dual;

NLS_CHARSET_ID('ZHS16GBK')

--------------------------

852

把852换成16进制数,为354,把2、3字节的00 01换成03 54,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk 字符集的数据库就可以了。

2.版本问题

Exp/Imp很多时候,可以跨版本使用,如在版本7与版本8之间导出导入数据,但这样做必须选择正确的版本,规则为:

?总是使用IMP的版本匹配数据库的版本,如果要导入到816,则使用816的导入工

具。

?总是使用EXP的版本匹配两个数据库中低的那个版本,如在815与816之间互导,

则使用815的EXP工具。

imp和exp版本不能往上兼: imp可以导入低版本exp生成的文件,不能导入高版本exp生成的文件

2. SQL*Loader

2.1基本知识

Oracle的SQL*LOADER可以将外部格式化的文本数据加载到数据库表中。通常与SPOOL导出文本数据方法配合使用。

1.命令格式

SQLLDR keyword=value [,keyword=value,...]

例:

$ sqlldr user/pwd control=emp.ctl data=emp.dat bad=emp.bad log=emp.log

2.控制文件

SQL*LOADER根据控制文件可以找到需要加载的数据。并且分析和解释这些数据。

控制文件由三个部分组成,具体参数参考帮助文档:

1.全局选件,行,跳过的记录数等;

2. INFILE子句指定的输入数据;

3.数据特性说明。

comment: --注释

例:

load data

infile *

append --除了append外,还有insert、replace、truncate等方式

into table emp

fields terminated by '|'

(

no float external,

name

age

duty

salary

upd_ts begindata char(20),

integer external,

char(1),

float external,

date(14) 'YYYYMMDDHH24MISS'

)

100000000003|Mulder|000020|1|000000005000|20020101000000 100000000004|Scully|000025|2|000000008000|20020101235959

控制文件中infile选项跟sqlldr命令行中data选项含义相同,如使用infile *则表明数据在本控制文件以begin data开头的区域内。

一些选项:

FIELDS TERMINATED BY WHITESPACE

FIELDS TERMINATED BY x'09'

FILLER_1 FILLER, //指定某一列将不会被装载

DEPTNO position(1:2), DNAME position(*:16), //指定列的位置

SEQNO RECNUM //载入每行的行号

SKIP n

//指定导入时可以跳过多少行数据

3.数据文件

按控制文件数据格式定义的数据行集,例:

100000000001|Tom|000020|1|000000005000|20020101000000

100000000002|Jerry|000025|2|000000008000|20020101235959

固定格式、可变格式、流记录格式:

固定格式:

当数据固定的格式(长度一样)时且是在文件中得到时,要用INFILE "fix n"

load data

infile 'example.dat' "fix 11"

into table example

fields terminated by ',' optionally enclosed by '"'

(col1 char(5),

col2 char(7))

example.dat:

001, cd, 0002,fghi,

00003,lmn,

1, "pqrs",

0005,uvwx,

可变格式:

当数据是可变格式(长度不一样)时且是在文件中得到时,要用INFILE "var n"。如:load data

infile 'example.dat' "var 3"

into table example

fields terminated by ',' optionally enclosed by '"'

(col1 char(5),

col2 char(7))

example.dat:

009hello,cd,010world,im,

012my,name is,

流记录格式: // Stream-recored format:

load data infile 'xx.dat' "str '|\n'"

into table xx field terminated by ',' optionally enclosed by '"'

(col1 char(5), col2 char(7))

example.dat:

hello, ccd,|

world, bb,|

4.坏文件

bad=emp.bad

坏文件包含那些被SQL*Loader拒绝的记录。被拒绝的记录可能是不符合要求的记录。

5.日志文件及日志信息

log=emp.log

当SQL*Loader开始执行后,它就自动建立日志文件。日志文件包含有加载的总结,加载中的错误信息等。

2.2高级选项

1. Conventional Path Load与Direct Path Load

Conventional-path Load:

通过常规通道方式上载。

特点:commit, always gen redo logs, enforce all constraints, fire insert triggers, can

load into cluster, other user can make change

rows:每次提交的记录数

bindsize:每次提交记录的缓冲区

readsize:与bindsize成对使用,其中较小者会自动调整到较大者

sqlldr先计算单条记录长度,乘以rows,如小于bindsize,不会试图扩张rows以填

充bindsize;如超出,则以bindsize为准。

命令为:

$ sqlldr dbuser/oracle control=emp.ctl log=emp.log rows=10000 bindsize=8192000 Direct-Path Load:

通过直通方式上载,可以跳过数据库的相关逻辑,不进行SQL解析,而直接将数据导入到数据文件中。

特点:s ave, conditionly gen redo logs, enforce PK UK NN, not fire triggers, can not load into cluster, other user can not make change

命令为:

$ sqlldr dbuser/oracle control=emp.ctl log=emp.log direct=true

导入的数据文件可以用SPOOL导出文本数据方法生成。

SQL*PLUS环境设置

SET NEWPAGE NONE HEADING OFF SPACE 0 PAGESIZE 0

SET TRIMOUT ON TRIMSPOOL ON LINESIZE 2500

注:LINESIZE要稍微设置大些,免得数据被截断,它应和相应的TRIMSPOOL结合使用防止导出的文本有太多的尾部空格。

但是如果LINESIZE设置太大,会大大降低导出的速度,另外在WINDOWS下导出最好不要用PLSQL导出,速度比较慢,直接用COMMEND下的SQLPLUS命令最小化窗口执行。对于字段内包含很多回车换行符的应该给与过滤,形成比较规矩的文本

文件。

通常情况下,我们使用SPOOL方法,将数据库中的表导出为文本文件,如下述:

set trimspool on

set linesize 120 pagesize 2000 newpage 1 heading off term off

spool路径+文件名

select col1||','||col2||','||col3||','||col4||'..' from tablename;

spool off

2.3脚本

1.将表中数据记录导出为字段值用分隔符'|'分开的.dat文件

#!/bin/ksh

##################################################################

##名称: unloadtable

##功能:本shell用于将表中数据记录导出

##

导出为字段值用分隔符'|'分开的.dat文件

##编者:

##日期: 2006.03.18

##################################################################

if [ $# -ne 3 ]

then

echo "usage:unloadtable tablename username password."

exit 0

fi

##准备工作

echo "set heading off " >/tmp/$1.col

echo "set pagesize 0" >>/tmp/$1.col

echo "set linesize 800 " >>/tmp/$1.col

echo "set feedback off " >>/tmp/$1.col

echo "set tab off " >>/tmp/$1.col

echo "select column_name||',' from user_tab_columns where lower(table_name)='$1' order by column_id; " >> /tmp/$1.col

##产生select语句

echo "set heading off " >/tmp/$1.sel

echo "set pagesize 0" >>/tmp/$1.sel

echo "set linesize 800 " >>/tmp/$1.sel

echo "set feedback off " >>/tmp/$1.sel

echo "set tab off " >>/tmp/$1.sel

echo "select " >>/tmp/$1.sel

echo `sqlplus -s $2/$3 < /tmp/$1.col` |sed "s/,/||'|'||/g" |sed "s/||$//g"|sed

"s/date/\"date\"/g"

>>/tmp/$1.sel

##生成dat文件

#echo "from $1;\n/" >>/tmp/$1.sel由于/导致多执行一次select

echo "from $1;\n" >>/tmp/$1.sel

sqlplus -s $2/$3 < /tmp/$1.sel >$1_tmp.dat

#awk '{if(FNR!=1) print $0}' $1_tmp.dat >$1.dat

FNR选项使得第一条记录选不出

awk '{print $0}' $1_tmp.dat >$1.dat

rm -f $1_tmp.dat

2.将数据导入到相应表中

#!/bin/ksh

##################################################################

##名称:loadtable

##功能:本shell用于将已经准备好的.dat数据文件导入相应的表中

## .dat文件各个字段值用分隔符'|'分开。

##编者:

##日期: 2006.03.18

##################################################################

if [ $# -ne 3 ]

then

echo "usage:loadtable tablename username password."

exit 0

fi

##准备工作

echo "set heading off " >/tmp/$1.colsql

echo "set pagesize 0" >>/tmp/$1.colsql

echo "set linesize 800 " >>/tmp/$1.colsql

echo "set feedback off " >>/tmp/$1.colsql

echo "set tab off " >>/tmp/$1.colsql

echo "select column_name||',' from user_tab_columns where lower(table_name)='$1' order by

column_id; " >> /tmp/$1.colsql

##产生ctl文件

echo "load data" >/tmp/$1.ctl

echo "infile *" >>/tmp/$1.ctl

echo "into table $1" >>/tmp/$1.ctl

echo "fields terminated by '|'" >>/tmp/$1.ctl

echo `sqlplus -s $2/$3 < /tmp/$1.colsql` |sed "s/,$/)/g" |sed "s/^/(/g" >>/tmp/$1.ctl

##开始导入数据

echo "truncate table $1;" >/tmp/$1.sql

sqlplus $2/$3 < /tmp/$1.sql

sqlldr $2/$3 data=$1.dat control=/tmp/$1.ctl log=/tmp/$1.log

3. OS备份/用户管理的备份与恢复(User Managed Backup and Recovery)

用户管理的备份与恢复也称OS物理备份,是指通过数据库命令设置数据库为备份状态,然后用操作系统命令,拷贝需要备份或恢复的文件。这种备份与恢复需要用户的

参与手工或自动完成。

对于使用OS拷贝备份的数据文件,可以使用DBVERTIFY进行检验。DBVERTIFY 是一个外部工具,主要用于校验数据文件或备份的数据文件的数据块是否正确。

例:dbv /u01/oradata/oracle/users01.dbf BLOCKSIZE=8192

参数说明:

关键字

------------ FILE START END BLOCKSIZE LOGFILE FEEDBACK

说明

-------------

(默认)

---------------------

要检验的文件(NONE)

始块

结束块

逻辑块大小

输出日志

显示进程

(文件的第一个块)

(文件的最后一个块)

(2048)

(NONE)

(0)

Recover还可以进行测试,检测恢复的错误,错误信息记载在alert_SID.log文件中,通过测试,我们可以知道该恢复操作是否能正常完成。

SQL> RECOVER TABLESPACE sales TEST;

SQL> RECOVER DATABASE UNTIL CANCEL TEST;

3.1相关设置

3.1.1设置ARCHIVELOG与NONARCHIVELOG模式

重做日志组是以循环方式使用的,重做日志组会被盖重做日志信息就会丢失。为

了保存历史以来的重做日志,数据库可以运行在日志归档模式下(archivelog mode)。

在日志归档模式下,当日志组撤换到下一个组时后台进程ARCn将上一个日志文件复制到另一个地方(oracle 10g使用快速恢复区会归档到该区)保存。数据库默认为非归档

模式(noarchivelog mode)。

设置ARCHIVELOG模式步骤:

1.关闭数据库,备份已有的数据,改变数据库的运行方式是对数据库的重要改动,所

以要对数据库做备份,对可能出现的问题作出保护。

2.修改初试化参数:使用PFILE,修改初始化参数文件init[SID].ora

log_archive_start=true

log_archive_format=ARC%T%S.arc log_archive_dest=/arch12/arch #启动自动归档#归档文件格式#归档路径

ORACLE笔记

1.Oracle 工具:sqlplus Sqlplus / as sysdba Shutdown immediate(关闭数据库) Startup(启动数据库) 注意:数据库开启才可以进行操作 Select username,account_status from dba_users;(查询数据库中所有的用户名称与用户状态) Alter user scott identified by tiger account unlock;(scott用户解锁) Sqlplus scott/tiger(使用SCOTT 密码为tiger登陆ORACLE数据库) Connect scott/tiger (在SQL>中直接使用SCOTT用户连接数据库) Show all;(看所有变量) Set sqlprompt “_user>”(设置sqlplus环境下面的提示符用自身用户显示) 注意:如要变量下次重启生效必须把变量写入 /u01/app/oracle/product/10.2.0/db_1/sqlplus/admin/glogin.sql中 Host(回到系统) Help index(查看所有命令) Help+命令(类似于LINUX中的MAN,查看命令的格式与用法) Disconnect(关闭SQLPLUS工具但是不离开数据库) Describe emp(查看EMP表) Define(定义变量,常用与写脚本用) 如:DEFINE _EDITOR =”vi” (CHAR) (定义VI编辑器用于保存最后一条执行的SQL语句) Save /u01/app/oracle/aa.sql (保存SQL语句) Get /u01/app/oracle/aa.sql (调用保存的SQL语句) 2.select(select 查询语句是ORACLE中最常用的语句) DML语句包括(insert 写入,update改变,delect删除,merge两张表同步) 注意:merge常用在ETL(数据仓库)底下 DDL数据定义语句包括(create创建对象,alter修改,drop删除对象,rename改名,truncate 删除整个表) TCL事务处理语句(commit提交立刻生效,rollback回滚,savepoint保存点,savepoint(保存点) DCL权限语句(grant赋予权限,revoke(收回权限) ORACLE的表称之为堆表(keep table) SELECT (1) writing basic SQL select statemanes 1. selecting all columns SCOTT>select * from dept; SCOTT>select dname,deptno,loc from dept; Basic SELECT Statement SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

oracle数据库索引的理解与总结

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 例如这样一个查询:SELECT * FROM TABLE1 WHERE ID = 44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),直接在索引里面找44(也就是在ID这一列找),就可以得知这一行的位置,也就是找到了这一行。可见,索引是用来定位的。 建立索引的目的是加快对表中记录的查找或排序。为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。 虽然建立索引能加快对表中记录的查询或者排序速度,但是并不是索引建得越多越好,这就需要我们了解使用索引过程中,索引的一些优点以及缺陷: 使用索引的好处: 创建索引可以大大提高系统的性能: 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。使用索引的一些不足: 第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引: ?在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; ?在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度; ?在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; ?在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间; ?在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。 同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点: ?对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。 ?对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了

学习oracle数据库的总结(图文整理)

1、在开发环境中连接到数据库,进行基本的select查询操作; 2、熟悉plsql的使用; 3、熟悉sqlplus相关命令(登录、查询、导入导出等) 登录sqlplus: 第一:使用dos窗口登录sqlplus Sqlplus 用户名/密码@数据库实例名 Sqlplus system/密码@数据库实例名as sysdba 第二:使用oracle自带的一个sqlplus登录,提供界面,显得更简单一些。 显示当前用户名:show user; 创建一个用户:create user 用户名identified by 密码; 给用户赋予登录的权限:grant connect to 用户名;(此时才可以使用这个用户来登录这个数据库。)给其赋予dba的权限。 修改用户的密码:alter user 用户名identified by 新密码; 查询: Select * from t_user; Select id from t_user; Select name from t_user; Select birthday from t_user; Select id,name from t_user; 导入导出: 导出表: (注意,导出表的exp命令不是在sqlplus下使用的,是在dos窗口下使用的命令。) exp userid=test/sa@test tables=(qx) file=d:\e1223.dmp exp userid=test/sa@test tables=(t_user,qx) file=f:\test.dmp 导出方案: Exp userid=test/sa@test owner=test file=f:\test2.dmp 导出数据库: Exp userid=test/sa@test full=y inctype=complete file=f:\all.dmp 导入表: 下面以一个例子来说明: 看下面的图,我的用户名test,密码sa,数据库实例名test,所有的表都在这里 现在我执行导出表JD的操作:exp userid=test/sa@test tables=(jd) file=f:\jd.dmp 在我的f盘下就出现了这么一个.dmp文件

Oracle数据库试题

constraint pk_spj primary key (sno,pno,jno), constraint fk_spj_sno foreign key (sno) references s(sno), constraint fk_spj_pno foreign key (pno) references p(pno), constraint fk_spj_jno foreign key (jno) references j(jno) 实验二游标和函数 1、定义一个游标完成显示所有供应商名。 declare v_sname s.sname%type; cursor cursor_sname is select sname from s; begin for curso in cursor_sname loop dbms_output.put_line(curso.sname); end loop; end; 2、定义、调用一个简单函数:查询返回指定供应商编号的供应商名及其供应零件总数量。create or replace function fun(f_sno in s.sno%type,f_sname out s.sname%type) return number as f_qty number; begin SELECT s.sname,sum(qty) into f_sname,f_qty from s,spj WHERE s.sno=spj.sno GROUP BY s.sname,spj.sno having spj.sno=f_sno; return f_qty; end; declare v_sno s.sno%type:='&sno'; v_sname s.sname%type; v_qty spj.qty%type; begin v_qty:=fun(v_sno,v_sname); dbms_output.put_line(v_sname||v_qty); end; 3、定义一个函数:对于给定的供应商号,判断是否存在,若存在返回0,否则返回-1。写一段程序调用此函数,若供应商号存在则在spj插入一元组。

oracle学习心得体会

oracle学习心得 一、sqlserver的理解 sqlserver服务器就像一栋大楼,大楼里的机房就像服务器的数据库,机房里的电脑如同数据库里的表 1、登录用户可以登录服务器——可以进大楼 2、登录用户成为数据库用户才能进指定的数据库——进入大楼的人给了某个机房的钥匙 才能进入机房 3、登录用户有权限使用表——进入机房的人有电脑的密码才能使用电脑 二、oracle的理解 oracle服务器(全局数据库)就像一个商场,商场的每一家公司是表空间,公司的业务是表 1、数据库由多个表空间组成——商场里有多家公司组成 2、表空间由段组成——公司要有自己的经营业务,可以只有一个业务,就是一个表空 间中只有一个段,可以有多个业务,就是一个表空间有多个段 3、段由区组成——单个业务的细分类别。例如有家公司经营三个业务,卖书,卖家电,

卖衣服,则每个业务就是一个段。而每个业务又有细分,比如卖书的话要进行分类了。计算机区,人文区,小说区等,每一区都要放上书架存放书籍,则书架就是oracle块,存放数据的 三、数据库,表空间,用户(指定默认表空间),表统统由管理员管理 四、在oem中管理数据库的步骤 1、创建 1)存储——表空间——创建表空间(tomspace)(类似于在sql中创建数据库, 通常可以省略,使用默认表空间为users,,临时表空间为temp) 2)首先展开安全性——创建新用户(tom,指定表空间)(类似于在sql中指定 数据库用户) 3)创建表——指定方案(用户)和表空间(列名不要带<>) 4)设置约束 5)输入信息:方案——用户名——表——右击——查看/编辑目录… 2、修改 1)方案——用户名——表 2)修改表结构,添加约束

ORACLE数据库学习心得

ORACLE数据库结课论文 一个好的程序,必然联系着一个庞大的数据库网路... 今年我们学习了oracle数据库这门课程,起初的我,对这个字眼是要多陌生有多陌生,后来上课的时候听一会老师讲课,偶尔再跟上上机课,渐渐的学会了不少东西,但我感觉,我学到的仍是一些皮毛而已,怀着疑惑和求知的心态,我在网上搜索了关于oracle数据库的一些知识。 1.ORACLE的特点: 可移植性ORACLE采用C语言开发而成,故产品与硬件和操作系统具有很强的独立性。从大型机到微机上都可运行ORACLE的产品。可在UNIX、DOS、Windows等操作系统上运行。可兼容性由于采用了国际标准的数据查询语言SQL,与IBM的SQL/DS、DB2等均兼容。并提供读取其它数据库文件的间接方法。 可联结性对于不同通信协议,不同机型及不同操作系统组成的网络也可以运行ORAˉCLE数据库产品。 2.ORACLE的总体结构 (1)ORACLE的文件结构一个ORACLE数据库系统包括以下5类文件:ORACLE RDBMS的代码文件。 数据文件一个数据库可有一个或多个数据文件,每个数据文件可以存有一个或多个表、视图、索引等信息。 日志文件须有两个或两个以上,用来记录所有数据库的变化,

用于数据库的恢复。控制文件可以有备份,采用多个备份控制文件是为了防止控制文件的损坏。参数文件含有数据库例程起时所需的配置参数。 (2)ORACLE的内存结构一个ORACLE例程拥有一个系统全程区(SGA)和一组程序全程区(PGA)。 SGA(System Global Area)包括数据库缓冲区、日志缓冲区及共享区域。 PGA(Program Global Area)是每一个Server进程有一个。一个Server进程起动时,就为其分配一个PGA区,以存放数据及控制信息。 (3)ORACLE的进程结构ORACLE包括三类进程: ①用户进程用来执行用户应用程序的。 ②服务进程处理与之相连的一组用户进程的请求。 ③后台进程ORACLE为每一个数据库例程创建一组后台进程,它为所有的用户进程服务,其中包括: DBWR(Database Writer)进程,负责把已修改的数据块从数据库缓冲区写到数据库中。LGWR(Log Writer)进程,负责把日志从SGA中的缓冲区中写到日志文件中。 SMON(System Moniter)进程,该进程有规律地扫描SAG进程信息,注销失败的数据库例程,回收不再使用的内存空间。PMON (Process Moniter)进程,当一用户进程异常结束时,该进程负责恢复未完成的事务,注销失败的用户进程,释放用户进程占用的资源。

Oracle数据库期末复习知识点整理

基础知识 表3.2 Oracle数据类型

表3.3 XSB的表结构

操作表 创建表 CREATE TABLE [schema.] table_name ( column_namedatatype [DEFAULT expression] [column_constraint][,…n] [,…n] ) [PCTFREE integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace_name] [STORGE storage_clause] [CLUSTER cluster_name(cluster_column,…n)] [ENABLE | DISABLE ] [AS subquery] 【例】使用CRETE TABLE命令为XSCJ数据库建立表XSB,表结构参照表3.3。 打开SQL*Plus工具,以system方案连接数据库,输入以下语句: CREATE TABLE XSB ( XH char(6) NOT NULL PRIMARY KEY, XM char(8) NOT NULL, XB char(2) DEFAULT '1' NOT NULL, CSSJ date NOT NULL, ZY char(12) NULL, ZXF number(2) NULL, BZ varchar2(200) NULL ); 修改表 ALTER TABLE [schema.] table_name [ ADD(column_namedatatype [DEFAULT expression][column_constraint],…n) ] /*增加新列*/ [ MODIFY([ datatype ] [ DEFAULT expression ] [column_constraint],…n) ] /*修改已有列的属性*/ [ STORAGE storage_clause ] *修改存储特征*/ [ DROP drop_clause ] /*删除列或约束条件*/ 【例】使用ALTER TABLE语句修改XSCJ数据库中的表。

oracle数据库学习笔记心得

select* |字段表名 from 表名 where 布尔表达式【条件】 externalcandidate 职员相关信息 contractrecruiter 猎头公司 查看表里所有字段 describe[描述] contractrecruiter select cname,nperecentagecharge from contractrecruiter 不显示原来名字,显示现在名字【用AS】 select cname as "Recruiter Name",nperecentagecharge as "Hire Fees" from contractrecruiter 不显示原来名字,显示现在名字【可不用AS】 select cname "Recruiter Name",nperecentagecharge "Hire Fees" from contractrecruiter 【双引号是否写】 双引号是为了区分大小写 职位表 position select *from position 缺额运算:[想减] select VDESCRIPTION , nbudgetedstrength, NBUDGETEDSTRENGTH -NCURRENTSTRENGTH , NYEAR from position

select VDESCRIPTION "Potion", nbudgetedstrength "Budgeted Strength" , NBUDGETEDSTRENGTH -NCURRENTSTRENGTH "Vacancies", NYEAR "Year" from position 显示非重复运行 查询来源地的人数 describe externalcandidate 查看职员城市名字 select ccity from externalcandidate 查看职员城市名字【名字不重复,插入一个关键字:distinct】select distinct ccity,cstate from externalcandidate 运算符: 两列 select vfirstname,vlastname from externalcandidate 字段拼接 select vfirstname||vlastname from externalcandidate select vfirstname||' '||vlastname from externalcandidate 学校 describe college 查看所有学校 select *from college 查看只是加利福尼亚的学校 select * from college where cstate='California' 一个条件 select vfirstname,vlastname,dbirthdate,ntestscore from externalcandidate where dbirthdate>='01-1月-70'

Oracle知识点总结

Oracle知识点总结 根据阎赫老师讲义整理Zealjiang 1、Oracle数据库的安装和配置 ⑴Oracle Internet级数据库 SQLServer 中小企业级数据库 Access 桌面级数据库 ⑵Oracle的安装 注意:来源和目标的目录不允许有中文或空格 ⑶Oracle数据库启动时必需开启的后台服务 ①OracleOrahome90TNSListener 使第三方的软件或语言访问 ②OracleServiceETC Oracle的实例 CRUD 增删改查 注意:②中的ETC是你起的实例的名字 ⑷Oracle的开发工具 ①DOS界面的开发平台 -> 运行->sqlplus ②Oracle本身基于DOS的平台 ->运行-> sqlplusw ③Oracle Enterprise Manager Console ④PL/SQL Developer7.1.5 ⑸创建一个表的完整流程 ①创建一个数数库 例子:创建一个数据库 ETC , 物理文件放在F:\ ,初始化1m ,自增长开启 create tablespace etc

datafile 'f:\etc.dbf' size 1m autoextend on; 删除表空间 drop tablespace 数据库名称; ②为该数据库创建一个帐号和密码 语法: create user 用户名称 identified by 密码 default tablespace 数据库名称 注意:1、在Oracle中账号和数据库one2one绑定 2、Oracle的密码不允许为纯数字或空 3、需要在system账号完成动作 修改Oracle的账号密码 语法:alter user 用户 identified by 新密码 ③用grant 权限 to 用户为该帐户授权 语法: grant 权限名称 to 用户; 撤销权限 语法:revoke 权限名称 from 用户名; ④在该帐号下创建表

Oracle数据库备份与恢复总结

Oracle数据库备份与恢复总结 1. EXP/IMP (导出与导入) (6) 1.1基本命令 (6) 1.获取帮助 (6) 2.三种工作方式 (6) 3.三种模式 (7) 1.2高级选项 (7) 1.分割成多个文件 (7) 2.增量导出/导入 (8) 3.以SYSDBA进行导出/导入 (8) 4.表空间传输(速度快) (8) 1.3优化 (10) 1.加快exp速度 (10) 2.加快imp速度 (10) 3.通过unix/Linux PIPE管道加快exp/imp速度 (10) 4.全库导入的一般步骤 (12) 1.4常见问题 (12) 1.字符集问题 (12) 2.版本问题 (13) 2. SQL*LOADER (14) 2.1基本知识 (14) 1.命令格式 (14) 2.控制文件 (14) 3.数据文件 (15) 4.坏文件 (16) 5.日志文件及日志信息 (16) 2.2高级选项 (16) 1. Conventional Path Load与Direct Path Load (16) 2. SPOOL导出文本数据方法 (16) 2.3脚本 (17) 1.将表中数据记录导出为字段值用分隔符'|'分开的.dat文件 (17) 2.将数据导入到相应表中 (18) 3. OS备份/用户管理的备份与恢复(USER MANAGED BACKUP AND RECOVERY) (20) 3.1相关设置 (20) 3.1.1设置ARCHIVELOG与NONARCHIVELOG模式 (20) 3.1.2 LOGGING与NOLOGGING (21) 3.1.3归档路径 (21)

Oracle数据库知识总结

AD1. 执行一个SQL脚本文件 SQL>start file_name SQL>@ file_name 我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。 4. 将显示的内容输出到指定文件 SQL> SPOOL file_name 在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。 5. 关闭spool输出 SQL> SPOOL OFF 只有关闭spool输出,才会在输出文件中看到输出的内容。 7. COL命令: 主要格式化列的显示形式。 1). 改变缺省的列标题 COLUMN column_name HEADING column_heading For example: Sql>select * from dept; DEPTNO DNAME LOC ---------- ---------------------------- --------- 10 ACCOUNTING NEW YORK sql>col LOC heading location sql>select * from dept; DEPTNO DNAME location --------- ---------------------------- ----------- 10 ACCOUNTING NEW YORK 2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上: Sql>select * from emp Department name Salary ---------- ---------- ---------- 10 aaa 11 SQL> COLUMN ENAME HEADING ’Employee|Name’ Sql>select * from emp Employee Department name Salary ---------- ---------- ---------- 10 aaa 11 note: the col heading turn into two lines from one line. 3). 改变列的显示长度: FOR[MAT] format Sql>select empno,ename,job from emp; EMPNO ENAME JOB ---------- ---------- --------- 7369 SMITH CLERK

oracle常用笔记总结

1、用dba权限的用户查看数据库都有哪些锁 select https://www.doczj.com/doc/2f10427898.html,ername,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by t2.logon_time; 2、查看有哪些对象被锁了 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id 3、根据sid查找进程id select pro.spid from v$session ses, v$process pro where ses.sid=129 and ses.paddr=pro.addr; select ses.sid from v$session ses, v$process pro where pro.spid=129 and ses.paddr=pro.addr; 4:根据这个spid对应linux下的进程pid linux命令: ps -ef | gre | 'ora' (找到所有ora开头的进程) kill -9 (pid) 5、解决delete后表的高水位的问题 初步判断应该是之前有大量数据,后来delete了,选成高水位,用shrink 清除高水位: alter table t_mobile_client_tp_prov enable row movement; alter table t_mobile_client_tp_prov shrink space; 重新收集统计信息: begin dbms_stats.gather_table_stats(ownname=>'traffic',tabname=>'T_MOBILE_CLIENT_TP_PR end; 6、ORA-02064 distributed operation not supported

Oracle数据库安装学习总结

学习总结 1、配置环境的安装: 2、安装须知: a)拷下来的文件夹大概20+G,从移动硬盘(别人家的移动硬盘) 中拷出和这两个文件夹; b)1中的四个工具在Han_training_college文件夹当中,注意安装 这些程序之前先把其中的EBS_工具集_For_R12改名字去掉其 中的中文,改成比如EBS_For_R12之类的。否则安装的时候会 报错; c)安装第一个工具Developer10G的时候,需要先设置虚拟内存,

虚拟内存的设置方法:计算→系统属性→高级系统设置→高级→性能的设置→高级→虚拟内存的更改,然后更改为自定义大小,贴上我的设置: d)安装第二个文件的时候也就是安装PLSQL Developer的时候, 建议不安装他给的东西,去官网下载最新的程序 https://www.doczj.com/doc/2f10427898.html,/plsqldev1005.exe e)贴上官网给出的中文包: https://www.doczj.com/doc/2f10427898.html,/plsqldevlang/100/chinese.exe

f)安装PLSQL的时候,注意安装的时候会报警,原因是因为安装 路径不允许有空格和括号,所以就像ReadMe里面说的那样, 建议安装在C:\PLSQLdev中; g)第三个没什么要说的; h)第四个的话,需要先安装java的环境和office办公软件,java 环境说的不是jdk和jre之类的,说的是可以直接运行.jar类型 文件的java虚拟机,很小,贴上网址: https://www.doczj.com/doc/2f10427898.html,/zh_CN/ i)安装这些之前或者之后都可以,安装java的jdk和jre,具体的 配置环境变量的就不说了,很容易的; j)安装完这些之后安装虚拟机:VMware-workstation; k)然后用虚拟机打开里面的系统; l)里面是XP系统,已经配置好的XP系统; m)里面是LINUX系统; n)安装VMware-workstation可以选择安装官网最新版的10版本,这个版本支持中文版;https://www.doczj.com/doc/2f10427898.html,/ 3、建立主机和虚拟机的访问 a)这一步的目的是为了让主机和虚拟机之间能够互相Ping通, 互相Ping通的目的是为了让主机里面的PLSQLdev可以访问主 机里面的oracle服务器然后进行操作,现阶段我们操作的主要 是练习SQL语句 b)要让主机和虚拟机之间互相Ping通有两个办法:

oracle数据库优化报告

oracle数据库 优化报告

目录 1、概述 (3) 2、数据库优化部分 (3) 2.1、环境优化 (3) 2.1.1 统计信息收集被关闭 (3) 2.1.2 部分索引失效 (4) 2.2、设计优化 (4) 2.2.1 设计类问题概述 (4) 2.2.2 设计类问题优化建议 (5) 2.3、SQL优化 (5) 2.3.1 SQL_ID= 7gf3typgc469a (5) 2.3.2 SQL_ID= bdcfdz26x5hm9 (6) 3、数据库优化总结 (7)

1、概述 随着应用软件用户负载的增加和愈来愈复杂的应用环境,操作系统的各项性能参数、数据库的使用效率、用户的响应速度、系统的安全运行等性能问题逐渐成为系统必须考虑的指标之一。性能测试以及优化通常通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试,用来检测系统是否达到用户提出的性能指标,及时发现系统中存在的瓶颈,最后起到优化系统的目的。 随着需求不断增加,特别是复杂逻辑的需求,一旦出现高并发量时,也将可能导致数据库主机无法承载,因此数据库优化亟待解决。 2、数据库优化部分 从2018年1月份开始跟踪及分析,发现托管区数据库在环境、设计及SQL三方面,都存在不少问题。在SQL类优化中,本地化代码编写和设计不良,是比较明显的问题。下面将分成环境、设计、SQL优化三类进行持续分析,并给出相关建议、整改方案、整改进度。 2.1、环境优化 2.1.1 被关闭 zonghe托管区数据库统计信息未自动收集,如果未打开收集,会对系统性能造成较大的影响。

需要开启统计信息 开启方法如下: --执行 BEGIN dbms_auto_task_admin.enable(client_name => 'auto optimizer statscollection', operation => NULL, window_name =>NULL); END; 2.1.2 部分索引失效 需要将索引进行删除。删除命令参考如下: drop index index_name; 2.2、设计优化 2.2.1 设计类问题概述 序号 类型 问题描述 1 表 ZJ_KZH_DATE 、ZJ_CRM_S_ORDER_GATHER 等本 地表,设计了大量的V1,V2,需要开发人员核对需 求 2 索引 索引定义较混乱,常与其他表进行连接的表,在连接

Oracle数据库心得体会

学习Oracle数据库的心得体会 对于学习Oracle数据库,应该先要了解Oracle的框架。它有物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成),逻辑结构(表空间、段、区、块),内存分配(SGA和PGA)算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写,后台进程(数据写进程、日志写进程、系统监控、进程监控、检查点进程、归档进程、服务进程、用户进程),SCN(System Change Number)。这些东西感觉都比较专业,我对它们也就是个知道,想要真真去认识我还得努力去做。虽然懂得还不是很多,起码会了基本的软件操作,老师说我们用的都是客户端,服务端看不到,也不知道服务端是什么样的,只知道客户端就挺多东西的,没有真正的去学习利用是很难掌握的。 Oracle数据库的学习使我对数据库的有了新的进步,以后再看到也就不至于什么也不懂,其实那么多数据库我觉得学好一门就行,只是他们的语言可能不大一样,学好一门后就可去认识其它的,这样应该有事半功倍的效果。就像我学习C语言,当时不能说是学习的棒,但不算差。所以我对以后的语言感觉都不是很困难,了解了https://www.doczj.com/doc/2f10427898.html,、C++还有网页中用的Html 语言、asp语言都能看懂,起码可以对别人的东西进行了一下修改。因此,我感谢Oracle数据库老师给了我有用的知识,以便我在以后学习或认识更多的内容能有新的方法和思维,也能更加有效和快速的去消化吸收新的东西。希望在今后中,Oracle能给我更多帮助,让我在我熟悉的https://www.doczj.com/doc/2f10427898.html,中运用上去,我以前的一个目标是要为学校的选课做一个选课助手来帮助大学。不过因为种种原因一直没有完成,也包括我对数据库的不了解,因为学了Oracle以后知道第一项内容是通过SQL查询后得到的,如果去把它们联系起来还不是真正明白,不过我相信我的目标能在学习Oracle后得到进展。

oracle学习总结

--在pl/sql中 --将正式库的零售单A部分数据导到测试库的零售单B中,首先要链接两个数据库 -----创建一个DATABASE LINK /*-- Drop existing database link dropdatabaselink TEST; -- Create database link createdatabaselink TEST connectto NEANDS3 using'(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.4)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl)))'; */ --然后将A表中的字段插入到B表中: insertinto m_retail(ID,C_STORE_ID,RETAILBILLTYPE,ISACTIVE,DOCNO,STATUS,BILLDATE,TOT_AMT_ACTUAL,CREATION DATE,REFNO,AD_CLIENT_ID ) selectID,C_STORE_ID,RETAILBILLTYPE,ISACTIVE,DOCNO,STATUS,BILLDATE,TOT_AMT_ACTUAL,CREATIONDAT E,REFNO,AD_CLIENT_ID from neands3.m_retail@test where status='2'and billdate='20140823' neands3:用户名 m_retail:表名 @test:链接的名称(已经创建好的) ---定时任务将M_RETAIL里的内容插入到新建的表M_RETAIL_MEN的存储过程: create or replace procedure P_M_RETAIL_MENDIAN(p_pi_id IN NUMBER) AS begin DELETE FROM M_RETAIL_MEN WHERE BILLDATE =TO_CHAR(BILLDATE ,'YYYYMMDD'); commit; insert into M_RETAIL_MEN(id,C_STORE_ID,BILLDATE,AMT_ACTUAL25) select get_sequences('M_RETAIL_MEN'),c_store_id,to_char(sysdate,'yyyymmdd'),sum(TOT_AMT_ACTUAL) from M_RETAIL t where t.billdate=to_char(sysdate,'yyyymmdd') and t.status='2' group by t.C_STORE_ID,t.BILLDATE; UPDATE AD_PInstance SET STATE = 'M', RESULT = 0, ModifiedDate = SYSDATE, ERRORMSG = NULL WHERE id = p_pi_id;---pl/sql存储过程自带的 end P_M_RETAIL_MENDIAN; get_sequences(部门):id自增 正则表达式: 在oracle里正则表达式有四个函数可用,分别是regexp_like、regexp_substr、regexp_instr

Oracle复习题总结

绪论: 1、Oracle,甲骨文,1977年开始研发,总部位于美国加州红木滩市,创始人为Larry Ellison(埃里森) 、 Bob Miner、Ed Oates 2、Oracle服务器=实例+数据库;Oracle实例=内存+后台进程; 第四章:表空间的创建与删除 例4.1 建立名称为data_ts1的数据表空间,大小为50M,区间统一为128KB大小。 SQL> conn system/systempwd@orcl SQL> drop tablespace data _ts1 including conntents; SQL> create tablespace data _ts1 2 tempfile ‘ %oracle_home%\database\data_ts1.dbf ’ SIZE 50M REUSE 3 uniform size 128K; 例4.2 建立名称为temp_ts1的临时表空间,使用temp_ts1.dbf文件存放临时数据。 SQL> conn system/systempwd@orcl SQL> drop tablespace temp_ts1 including conntents; SQL> create temporary tablespace temp_ts1 2 tempfile ‘ %oracle_home%\database\temp_ts1.dbf ’ size 20M reuse 3 uniform size 128k; 例4.3创建10号部门经理用户EMP_MGR10,指定该用户的数据表空间为data_ts1,临时表空间为temp_ts1。授权该用户可以查看SCOTT用户下雇员表中的记录。 SQL> conn system/systempwd@orcl SQL> drop user emp_mgr10 cascade; SQL> create user emp_mgr10 identified by emp_mgr10pwd 2 default tablespace data_ts1 temporary tablespace temp_ts1; SQL> grant connect to emp_mgr10; SQL> conn scott/tiger@orcl 4 tempfile ‘ %oracle_home%\database\temp_ts1.dbf ’ size 20M reuse 5 uniform size 128k; 例4.4 创建和应用撤销表空间。 SQL> conn system/systempwd@orcl SQL> drop tablespace undo_ts1 including conntents; SQL> create undo tablespace undo_ts1 2 datafile ‘ %oracle_home%\database\undo_ts1.dbf ’ size 50M reuse; 例4.5 创建大文件表空间,并指定为SCOTT用户的默认数据表空间。 SQL> conn system/systempwd@orcl SQL> drop tablespace bigfile_ts1 including conntents; SQL> create bigfile tablespace bigfile_ts1 2 datafile ‘ %oracle_home%\database\bigfile_ts1.dbf ’ size 50M reuse; SQL> alter user scott default tablespace bigfile_ts1; 需要注意的是,大文件表空间的段空间管理不能为手工(MANUAL),只能为自动(AUTO)。 例4.6调整数据表空间data_ts1的大小。 SQL> conn system/systempwd@orcl --为表空间data_ts1增加一数据文件,大小为1M。 SQL> alter tablespace data_ts1 2 add datafile ‘ %oracle_home%\database\ data _ts2.dbf ’ size 1M; --重置该数据文件大小为2M。 SQL> alter tablespace 2 datafile ‘ %oracle_home%\database\ data _ts2.dbf ’ siz e 2M;

相关主题
文本预览
相关文档 最新文档