版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
{管理信息化ORACLE}Oracle入门基本知识一点通Oracle入门基本知识一点通关键字:Oracle首页.NetC软件考试思科技术IT厂商认证网络安全网络管理网络工程JavaLinuxMail服务器MySQLOraclePhpPowerBuilderSQLSERVERUnixWeb及应用服务器Web开发Windows华为3Com技术Oracle入门基本知识一点通Oracle基本知识轻松学:1.一个表空间只能属于一个数据库。2.每个数据库最少有一个控制文件(建议33.每个数据库最少有一个表空间(SYSTEM4.建立SYSTEM表空间的目的是尽量将目的相同的表存放在一起,以提高使用效率,只应存放数据字典。5.每个数据库最少有两个联机日志组,每组最少一个联机日志文件。6.一个数据文件只能属于一个表空间。7.到其他表空间中。8.建立新的表空间需要建立新的数据文件。9.数据文件被Oracle格式化为Oracle块,Oracle9i以前版本中,Oracle块的大小是在第一次创建数据库时设定的。10.并且以后不能改变,要想改变,只能重建数据库。11.一个段segment只能属于一个表空间,但可以属于多个数据文件。12.一个区extent只能属于一个数据文件,即区间(extent)不能跨越数据文件。13.PCTFREE和PCTUSED总和不能大于等于100。14.单独一个事务不能跨越多个回滚段。15.索引表不含ROWID值。16.拥有不同大小的回滚段没有任何益处。17.COMMIT18.一个事务即使不被提交,也会被写入到重做日志中。19.Oracle8.0.4中,在初始安装时建立的缺省数据库,实例名为ORCL。20.一个块的最大长度为16KB(有2K、4K、8K、16K)。每个数据库最大文件数(按块大小)2K块20000个文件4K块40000个文件8K块或以上65536个文件21.Oracleserver可以同时启动多个数据库。22.一套操作系统上可以安装多个版本的Oracle数据库系统(UNIX可以,NT23.一套Oracle数据库系统中可以有多个Oracle数据库及其相对应的实例。24.每个Oracle数据库拥有一个数据库实例(INSTANCEOPS25.所以,一套操作系统上同时可以有多个Oracle数据库实例启动。Oracle数据库配置完全实战手册关键字:Oracle,数据库首页.NetC软件考试思科技术IT厂商认证网络安全网络管理网络工程JavaLinuxMail服务器MySQLOraclePhpPowerBuilderSQLSERVERUnixWeb及应用服务器Web开发Windows华为3Com技术Oracle数据库配置完全实战手册TobeDBAornottobe,thatisNOTthequestion.Arron作者允许自由散发此文档,但对其进行的任何修改应通知作者,以便于维护版本。作者email:Oracle8以8.1.5为界分为普通版本和internet版本。普通版版本号8.0.x,接触较多的是8.0.5internet版版本号包括8.1.5(Release18.1.6(Release28.1.7(Release3通版简称Oracle8,internet版简称Oracle8i。如果不作特别说明,文中凡出现Oracle8i均指8.1.7版。Oracle9i目前出到第二版,版本号为9.2,简称Oracle9i。如果不作特别说明,文中凡出现Oracle9i均指9.2版。本手册介绍Oracle“所然“所以然。全部操作以命令行方
GUIWindows了避免Windows和Unix两种截然不同的使用和开发风格给描述带来的复杂性,所以本手册不介
绍在Windows上的Oracle文中所有例子以oradb作为数据库实例名,数据库用户dbuser,口令Oracle。如果不作特别说
Oracle8i所有的例子都在Solaris8IntelPlatform+Oracle8iR3Oracle9i
所有的例子都在RedHatLinux7.3+Oracle9iR2上通过。附录文件包含全部示例,简称附录。
大量使用表emp作为例子(参见附录08_procsingle/):createtableemp(nonumber(12)notnull,namechar(20)notnull,agenumber(6)notnull,dutychar(1)notnull,salarynumber(12)notnull,upd_tsdatenotnull,primarykey(no));开发中对应emp表结构,定义其宿主结构(参见附录08_procsingle/db.h):typedefstruct{doubleno;charname[21];intage;charduty[2];doublesalary;charupd_ts[15];}emp_t;修改历史:2000/07版本1.02000/09版本1.1增加Linux安装,export,import使用,数据库监控及优化(utlbstat,utlestat,分析session语言时间环境变量设置,Oracle8.0.5手工建库脚本(wei_dick提供,稍加修改)2000/10版本1.2修改Linux安装中RedHat6.x+Oracle8.1.6、数据库优化中配置文件和session分析、常用技巧中下载上传文本资料和访问他机数据库;增加创建数据库实例中资料字典参考、常用技巧中删除冗余记录、应用开发,常见错误感谢liu_freeman,jiao_julian,huang_miles等人对开发工具所作的努力2001/03版本1.3修改安装部分、配置、常用技巧、应用开发;增加手工建库、MTS配置;重写开发工具感谢li_bo的大力帮助2001/09版本1.4修改数据库优化,使之较系统化;增加应用开发中多线程下的数据库连接2002/04版本1.5修改数据库优化、多线程条件下数据库编程;分离附录的程序范例2002/12版本2.0Oracle9i安装配置、OCI开发、mysqlPROC开发Oracle傻瓜手册11安装61.1通用设置61.2UnixWare771.2.1Oracle871.3HP-UX81.3.1Oracle881.4Linux91.4.1kernel2.0&glibc2.091.4.2kernel2.2&glibckernel2.4&glibc2.2101.5Solaris112创建132.1Oracle8&8i132.1.1工具创建132.1.2手工创建132.1.3MTS(multi-threadedserver)142.1.4调整临时表空间152.1.5调整回滚表空间152.1.6调整日志152.1.7调整用户表空间162.1.8创建用户172.1.9创建资料对象172.1.10创建只读用户182.1.11激活及关闭数据库实例192.1.12网络配置192.2Oracle9i212.2.1手工创建212.2.2创建用户表空间223初始化文件配置233.1Oracle8&8i233.2Oracle9i254工具264.1sqlldr264.2exp274.3imp284.4sqlplus294.4.1命令行参数294.4.2提示符命令294.4.3SET选项304.4.4例子305备份及恢复325.1export与import方式325.2冷备份325.3联机全备份+日志备份325.3.1设置325.3.2步骤335.3.3恢复335.4注意要点346数据库优化356.1通用设置356.1.1硬件配置356.1.2应用配置356.1.3日常性能监控366.2实战分析366.2.1总体分析376.2.2详细分析376.3专题分析396.3.1巨表查询396.3.2对比测试416.3.3上下载数据446.3.4回滚空间快照陈旧(snapshottooold)467常用技巧487.1增加、更改和删除域487.2删除冗余记录497.3更改字符集497.4表数据迁移507.5成批生成资料507.6注意要点518嵌入式sql(C)538.1编译538.2sql语句548.2.1内部类型与宿主类型对应548.2.2连接和断开548.2.3事务558.2.4标准sql语句558.2.5动态sql语句558.2.6数组操作568.3编程框架588.3.1总体原则588.3.2单线程和多线程598.3.3开发工具609OCI—OracleCallInterface619.1连接和断开619.1.1句柄层次619.1.2连接流程619.1.3断开流程629.2sql语句629.2.1事务629.2.2无结果集的sql语句639.2.3有结果集的sql语句639.2.4LOB659.3编程框架679.3.1总体原则679.3.2sql语句689.3.3函数6910附录—mysql7210.1安装配置7210.2管理7210.2.1初始调整7210.2.2建立用户对象7310.3开发7310.3.1连接和断开7310.3.2无结果集的sql语句7410.3.3有结果集的sql7410.3.4错误处理751安装所有参见内容都在附件01_install_02_create_03_init/下。1.1通用设置文件系统swap创建文件系统时应考虑Oracle对swapOracle服务进程将占用10-20Mswap空间,通常操作系统建议2倍于内存的swap空间,数据库系统可能要求更多些。操作系统用户和环境变量Oracle文档要求为数据库系统的管理和使用建立3践中并没有体现其必要性。为简化操作起见,只建立dba组,即拥有更新软件和管理最高权限(SYSDBAOSDBASYSDBA身份登录进任何一个数据库实例,简单的,只建立一个用户,习惯上使用Oracle的名称。$groupadddba$useradd–gdba–dOracle–m–sbashOracle确定Oracle系统的根目录Oracle_BASE,如Oracle,所有的软件和配置都在这个目录下展开,虽然并非一定需要如此,但这是一个良好的习惯。同时确定软件安装的起始点Oracle_HOME,通常在Oracle_BASE下。修改Oracle用户的.profile,加入以下各行,或者修改profile,使每一个用户都获得环境变量设置umask022Oracle_BASE=OracleOracle_HOME=$Oracle_BASE{版本号}(如8.0.5,8.1.7,9.2.0等)Oracle_SID=oradbOracle_TERM=ansi#仅与Oracle8字符接口安装有关ORA_NLS33=$Oracle_HOMEnlsdata#字符集支持NLS_LANG=American_America.{ZHS16CGB231280(Oracle8支持)|ZHS16GBK(Oracle8i支持)|ZHS16GB18030(Oracle9i支持)}NLS_DATE_FORMAT=YYYYMMDDHH24MISSLD_LIBRARY_PATH=$Oracle_HOME/lib:$LD_LIBRARY_PATH#动态连接路径,Unixware中要确保ucb/lib在ccs/lib之后出现TMPDIR=/tmp#安装中Oracle会在此目录下存储相当数量的档,所以TMPDIR所在的磁盘分区要确保空闲空间的大小,至少在1G左右PATH=$PATH:$Oracle_HOME/binexportOracle_BASEOracle_HOMEOracle_SIDOracle_TERMORA_NLS33NLS_LANGNLS_DATE_FORMATLD_LIBRARY_PATHTMPDIR参见profile。注意:NLS_LANG=American_16CGB231280(ZHS16GBK)“American”指显示信息时所用的语言,窃以为凭大家的英语水平足够应付,如改为SIMPLIFIEDCHINESE,在不带中文支持的终端上就没人能看懂了。“America”指地区指ClientOracle8i已支持到”ZHS16GBK”NLS_DATE_FORMAT=YYYYMMDDHH24MISSOracle的date14位字符串,如”959”据Oracle文檔,此参数可按照session,操作系统用户环境,由高到低的优先级顺序设置,依次覆盖。相关系统表:v$nls_parametersv$nls_valid_valuesX-WindowOracle8的安装程序是光盘mount点orainst,使用字符接口,不用考虑X-Window。Oracle8i和9i使用光盘mount点/runInstallerJava文处理有问题,所以应在进入X-WindowLANGLC_ALL,LC_TYPE,…变量不是中文。LANG=CLC_ALL=C安装选项Oracle8i的主要软件包在安装选项Enterpriseproc选择安装选项Client中的programmer。Oracle9i的主要软件包在安装选项Enterpriseproc安装,一定要选择安装选项Client中的Administrator。runInstaller的稳定性欠佳,建议每次安装结束后,先退出,再进行下一次安装。1.2UnixWare71.2.1Oracle8确认操作系统的交换分区swap不少于350M认为该打的补丁统统打上,宁滥毋缺。UnixWare7.0.1必须打的补丁为ptf7033,ptf7051,ptf7052,ptf7068,ptf7096。将default/login中的ulimit设为大于(稍大一点即可,太大会有问题)将conf/node.d/async中的600改为666修改以下核心参数核心参数必需值解释SHMMAX647共享内存段最大尺寸SHMMNI100系统共享内存段标识最大数目SHMSEG15每个进程所能使用最大共享内存段数目SEMMNI100核心信号量标识最大数目SEMMSL150每个信号量标识包含的信号量个数SCORLIM0X7FFFFFFFCore文件最大尺寸HCORLIM0X7FFFFFFFSDATLIM0X7FFFFFFF进程堆最大尺寸HDATLIM0X7FFFFFFFSVMMLIM0X7FFFFFFF进程最大映像地址HVMMLIM0X7FFFFFFFSFSZLIM0X7FFFFFFF进程档最大偏移量HFSZLIM0X7FFFFFFFSFNOLIM128进程能打开的最大档个数HFNOLIM2048NPROC20+(8*MAXUSERS)MAX:125000ARG_MAX1,048,576NPBUF100I/O缓冲区数目MAXUP1000用户同时使用的最大进程个数STRTHRESH0X500000流能使用的最大字节数为优化应用系统修改以下核心参数核心参数参考值解释MSGMAX8192消息最大尺寸MSGMNB81920消息队列尺寸MSGMNI2048系统能并存的最大消息队列数目MSGSSZ16384MSGTQL4096系统能并用的消息头数目SEMMNI1024SEMMSL150也可通过编辑conf/cf.d/stune达到同样效果重新连接内核,重起或运行confidbuild–B修改核心参数SEMMAP时,注意要同时修改conf/mtune.d/ipc中相应的MAX值建立opt/Oracle,使Oracle成为此目录属主mountOracle光盘,通常mount目录为/SD-CDROM_1root用户,Oracle_OWNER=Oracle,执行光盘上orainst中,建立optoratab安装时,选custom方式,安装时不建立数据库,字符集可选SimplifiedChinese1.3HP-UX1.3.1Oracle8流程大致与Unixware相同,调整kernel参数可通过sam,选择/KernelConfigurationApplyTunedParameterSet/OLTPDatabaseServerSystem,另外为提高I/O能力,还需调整以下参数:核心参数参考值解释bufpages61992缓冲页dbc_max_pct10动态缓存占内存最大百分比dbc_min_pct10动态缓存占内存最小百分比nbuf设定共享库目录SHLIB_PATH,不是LD_LIBRARY_PATHSHLIB_PATH=$SHLIB_PATH:$Oracle_HOME/lib;exportSHLIB_PATH1.4Linux1.4.1kernel2.0&glibc2.0代表产品为RedHatLinux5.1。Oracle8在RedHat5.1上能成功安装,安装软件包为805一般不会在RedHat5.1上安装Oracle8i以上的版本修改共享内存最大尺寸限制:在系统初始化脚本rc.d/中加入:echo648>sysshmmax重启计算机。这样做避免了Oracle分配的共享内存碎片化,对提高效率有好处。原$Oracle_HOMEadmin/中sys_includeproc预处理pcsys_include=(include,lib/gcc-libegcs-2.91.66/include)(视gcc版本而定)1.4.2kernel2.2&glibc2.1代表产品为RedHatLinux6.2。修改共享内存最大尺寸限制:在系统初始化脚本rc.d/中加入:echo648>sysshmmax重启计算机。这样做避免了Oracle分配的共享内存碎片化,对提高效率有好处。原$Oracle_HOMEadmin/中sys_includeproc预处理pcsys_include=(include,lib/gcc-libegcs-2.91.66/include)(视gcc版本而定)Oracle8本来已经很少有人在LinuxKernel2.2的系统中安装Oracle.5纯粹的文本接口和与之相处的无数不眠之夜,故收录如下:Oracle8在kernel为2.2.x的Linuxsvrmgrl,sqlplus时会导致“Segmentationfault”,原因在于这些Linux使用了默认的libc2.1,与Oracle8程序重连接所需的libc2.0不兼容。Oracle的补丁程序其实是将Oracle可执行程序的重连接脚本中libc位置重新定位到libc2.0gccld重新连接可执行档。为此必须先在系统中安装兼容库和相应工具。这是权宜之计,而且仅对RedHat有效。root用户rpm–ivhtcl-8.0.3-20.i386.rpmOracle的IntelligentAgent要使用rpm–ivhpat-binutils-5.2-.23.1.i386.rpmrpm–ivhpat-glibc-5.2-.i386.rpmrpm–ivhpat-egcs-5.2-1.0.3a.1.i386.rpmrpm–ivhpat-egcs-c++-5.2-1.0.3a.1.i386.rpmrpm–ivhpat-libs-5.2-1.i386.rpm版本号可略有差异Oracle用户安装Oracle8.0.5但不创建instance,如选择安装文档,则会产生如下错误:Awriteerroroccurredwhiletrytocopy‘Oracle/setup_Oracleserver.805lnx_server.805.map’to‘product/8.0.5server.805lnx_server.805’(Nosuchfileordirectory).这是安装程序的一个bug—不能创建目录。可进入$Oracle_HOME/doc,mkdir–pserver.805/install,再选择Retry从.wwwLinux下载,在某一目录(如~/patch)下展开cd~/patch经过一段时间后,看到“AppliedglibcpatchforOracle8.0.5.xsuccessfully”,表明补丁成功。此时就能成功创建instance。Oracle8i推荐使用典型安装,否则会产生难以预料的错误。1.4.3kernel2.4&glibc2.2代表产品为RedHatLinux7.3,SuSELinux7.3。Oracle8i与Oracle8在RedHatLinux6.2上安装所遇到的问题一样,Oracle8i使用的glibc2.1与操作系统自带的glibc2.2glibc2.1Oracle各组件。除非万不得已,不建议使用兼容方式,因此省略安装步骤,可参阅网上有关文档。Oracle9iRedHat7.3修改共享内存最大尺寸限制:在系统初始化脚本rc.d/中加入:echo648>sysshmmax。修改信号量参数:在系统初始化脚本rc.d/中加入:echo128>syssem。这4个参数依次为SEMMSL(每个用户拥有信号量最大数量),SEMMNS(系统信号量最大数量),SEMOPM(每次semop系统调用操作数),SEMMNI(系统信号量集最大数量),事实上只有SEMOP是需要调整的。重启计算机。在连接可执行档过程中,会发生中断,打开$Oracle_HOMElib/env_,找到INSO_LINK,在-L$(CTXLIB)-L$(LDLIBFLAG)m后加入-L$(LDLIBFLAG)dl,重试。SuSE7.3与RedHatSuSE没有rc.d/rc.d/rcexit语句之前。安装过程中没有发生任何问题。1.5SolarisOracle8i在Solaris7,8IntelPlatform上均能顺利安装,未测试SolarisSparcPlatform。Oracle9i目前无SolarisIntelPlatform上的版本,由于条件所限,未测试在SolarisSparcPlatform上的Oracle9i。修改下列核心参数:核心参数参考值解释shmmax物理内存/2共享内存段最大尺寸shmmin1共享内存段最小尺寸shmmni100系统共享内存段标识最大数目shmseg10每个进程所能使用最大共享内存段数目semmni100系统信号量标识最大数目cesses+10每个信号量标识包含的信号量数目semmnssum(.processes)*10+max(.processes)+count()*10系统信号量最大数目semopm100每个semop调用最大操作数目rlim_fd_max4096系统文件句柄最大数目rlim_fd_cur1024每个进程档句柄最大数目修改system,并重启使核心参数生效例:setshmsys:shminfo_shmmax=648setshmsys:shminfo_shmmin=1setshmsys:shminfo_shmmni=100setshmsys:shminfo_shmseg=10setsemsys:seminfo_semmni=200setsemsys:seminfo_semmsl=200setsemsys:seminfo_semmns=1000setsemsys:seminfo_semopm=100setsemsys:seminfo_semmap=200setsemsys:seminfo_semmnu=250setsemsys:seminfo_semvmx=32767setmsgsys:msginfo_msgmni=200setmsgsys:msginfo_msgmap=200setmsgsys:msginfo_msgmax=65536setmsgsys:msginfo_msgmnb=655360setmsgsys:msginfo_msgssz=64setmsgsys:msginfo_msgtql=1000setmsgsys:msginfo_msgseg=16384setrlim_fd_max=4096setrlim_fd_cur=1024参见solaris_7_8/system注意:一定要先重建好kernel后再安装,因为Oracle安装时根据kernel动态连接程序,如果先安装OraclekernelOracleinstance创建失败等。在kernel参数中,对数据库运行影响最大的主要是SHMMAX,SEMMNS,SEMMNI,SEMMSL,SHMMAX取内存一半即可,SEMMNS理论上应等于SEMMNI*SEMMSL,实际取一个较大值即可。SEMMNS:信号量最大个数,有些系统可忽略,因为他与SEMMNI,SEMMSL有关。2创建所有参见内容都在附件01_install_02_create_03_init/下。以Oracle用户进行操作,设定数据库实例名为oradb(长度建议不要超过82.1Oracle8&8i2.1.1工具创建Oracle8运行$Oracle_HOMEorainst(安装数据库时必须选中Oracleinstaller选择createdatabaseobject,安装接口中选OracleEnterpriseServer(RDBMS)mountpoint暂为$Oracle_BASE,字符集为ZHS16CGB231280或ZHS16GBK,调整system,tools,users,rbs,temp,redolog等尺寸。创建过程中会提示输入osdba,osoper的Unix组,这是向instance表明此组的成员享有角色sysdba或sysoper的权限,从而用connect/assysdba替换掉connectinternalOracle8i进入XWINDOW,运行dbassist2.1.2手工创建任何工具都有其局限性,熟练的数据库管理员可采用手工方法创建数据库,以增加对系统的灵活控制。对于手工建库Oracle8与Oracle8i的区别主要是建立的资料字典和存储过程有些不同,Oracle8i的dbassistant可以生成建库脚本供以后使用。取得,编辑如db_name,control_file,dump_dest等参数,以符合实际情况。如不需要生成remote_login_passwordfile,可在中设remote_login_passwordfile=none;如需要,在中设remote_login_passwordfile=exclusive,运行orapwdfile=<file>password=<password>必须创建新生成档所要用到的目录,如在配置文件中指定的bdump,cdump,udump据文件存储目录。将转移到$Oracle_BASEoradb,并连接到$Oracle_HOME。ln–s$Oracle_BASEoradb$Oracle_HOME取得8i/,编辑如pfile,数据文件目录等参数,以符合实际情况,并转移到$Oracle_BASEoradb下,执行。相关系统表:v$databasev$datafile(file#,ts#,name)v$tablespace(ts#,name)v$parameter(sql>showparameter)v$sga(sql>showsga)2.1.3MTS(multi-threadedserver)Oracle8使用两种配置模式:dedicatedserver(专用模式)和sharedserver(即multi-threadedserver下,专用模式为每个连接设立一个专用Oracle服务进程,以保持较高的性能和稳定性。而当连接数上升到非常高的数目且不保持长期连接时,数据库管理开销增大,并且占用大量系统资源,给操作系统形成带来极大的压力。在这种情况下,共享模式更为有利,它通过缓冲池和预先设定数目的server提供服务,每个连接不再有专用的Oracle服务进程,每次sql操作由分配器(dispatcher)确定Oracle服务进程。multi-thread仅表示分配器展开的多个服务流程,并非操作系统意义上的多线程配置:加入mts_dispatchers=“(address=(protocol=TCP))(dispatchers=10)”#初始分配器数量mts_max_dispatchers=15#最大分配器数量mts_servers=50#初始服务进程数量mts_max_servers=80#最大服务进程数量mts_service=oradb3#MTS方式下对外提供的数据库服务,非service_name表明instance能够提供MTS服务,不意味着取消dedicated方式应删除所有SID_LISTSID_LIST的存在决定LISTENER以dedicated还是shared方式激活Oracle连接。如SID_LIST存在,LISTENER不再接受instance的登记,以dedicated方式激活Oracle连接;如SID_LIST不存在,LISTENER激活时不为任何instance服务,由instance来登记MTSservice,以shared方式激活Oracle连接clientMTS在clienthost一定要写数据库server析,似乎server端接收到client端请求后会将主机字符串返回,应此client端必须能够解析,否则会报出诸如“databaseservicenotexist”的错误.=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=oradb)))hosts.dbserver激活:先起LISTENER,后起instance以下步骤均在数据库open状态下,由system用户完成2.1.4调整临时表空间altertablespacetemptemporary;#Oracle8的orainst没有将temp的缺省值permanent改为temporary,这样用户在temp上暂存的资料均为永久对象,很快将temp空间耗完。Oracle8i已修正。sql>altertablespacetempdefaultstorage(initial128knext128kmaxextents5000pctincrease0);sql查询操作如groupby,orderby,distinctjoin段的大小。如果实例激活参数指定hash_join_enabled=true(缺省为trueOracle选择以hashjoin方式进行表与表的联接,Oracle根据查询操作的实际情况计算出hash_multiblock_io_count,此参数从属于session0hashjoin一次I/O读写需要的连续资料空间。这样当此参数大于临时段的next扩展块时,hashjoin操作会中断。如果预知联接表的规模比较巨大,可使用altertablespacetempdefaultstorage(next…)将next值设为较大值,待全部操作完成后,再恢复正常。2.1.5调整回滚表空间先将建库工具缺省设定的若干个回滚段删除sql>alterrollbacksegmentr01offline;sql>droprollbacksegmentr01;根据实际需要创建回滚段(如r01-r10sql>createrollbacksegmentr01storage(initial128knext128kmaxextents5000optimal5M)tablespacerbs;sql>alterrollbacksegmentr01online;注意修改$Oracle_HOME中的激活回滚段段名另创建一个尺寸无限制的回滚段(r99sql>createrollbacksegmentr99storage(initial128knext128kmaxextents5000)tablespacerbs;如果在创建回滚段时使用createpublicrollbacksegment,则不需要在$Oracle_HOME中用rollback_segment=(…)选项激活,推荐使用public方式相关系统表:sql>selectsegment_name,initial_extent,next_extent,max_extents,extents,bytesfromdba_segmentswheresegment_type=’ROLLBACK’;#回滚段占用空间状况sql>selectsegment_name,statusfromdba_rollback_segs;#回滚段状态2.1.6调整日志建立日志组sql>alterdatabaseaddlogfilegroupx(‘log1a’,’log1b’)size10M;增加日志组成员sql>alterdatabaseaddlogfilemember‘log1c’togroupx;删除日志数据库实例至少需要2个日志组,只有状态为inactive的日志组才能被删除,而当前日志组状态为currentactive3个日志组才能删除其中的一个,如果要更新全部日志组,只能删除一个,再创建一个,直至全部被更新。sql>alterdatabasedroplogfilegroupx;如果要删除的日志组是当前日志组,必须先将其切换至状态为inactive,再删除。sql>altersystemswitchlogfile;删除日志组成员sql>alterdatabasedroplogfilemember‘log1c’;相关系统表v$log#日志组状态、占用空间、顺序号等v$logfile#日志组文件2.1.7调整用户表空间创建表空间假定表数据在ts_data,索引在ts_indexsql>createtablespacets_datadefaultstorage(initial10Mnext10Mmaxextents5000pctincrease0datafile‘path/data_01.dbf’size500M;sql>createtablespacets_indexdefaultstorage(initial5Mnext5Mmaxextents5000pctincrease0)datafile‘path/index_01.dbf’size500M;参考命令:删除表空间sql>droptablespacedataincludingcontents;#删除表空间及其包含的所有资料对象相关系统表:user(dba)_tablespaces增加表空间尺寸假定表空间ts_data由path/data_01.dbf和path/data_02.dbf(500M)组成增加一个数据文件:sql>altertablespacets_dataadddatafile‘path/data_03.dbf’size500M;扩大原有档大小:sql>alterdatabasedatafile‘path/data_01.dbf’resize1000M;移动表空间数据文件假如要求为:将path1下data_01.dbf移至path2下,并把文件名改为data01.dbf实例处于关闭状态sqlplus“/assysdba”sql>startupmount回到shell环境下$mvpath1/data_01.dbfpath2/data01.dbf$mvpath1/data_02.dbfpath2/data02.dbf再到sqlplus环境中sql>alterdatabaserenamefile‘path1/data_01.dbf’to‘path2/data01.dbf’;或sql>altertablespacetbsdatarenamedatafile‘path/data_01.dbf’to‘path2/data01.dbf’;sql>alterdatabaseopen;查看剩余空间sql>selecttablespace_name,sum(bytes),max(bytes)fromdba_free_spacegroupbytablespace_name;注意:空闲数据块总和sum(bytes)够用并不意味每个空闲块都满足分配需要,所以当表空间不够分配扩展块的时候,还要查看最大空闲数据块max(bytes)的大小。合并空闲块如果表空间上的资料对象经常发生类似drop-create那些采用较大扩展块的资料对象不能利用较小的空间碎片,造成空间浪费。可通过将较小的空闲块合并成较大的空闲块的方法,减少空间浪费。sql>altertablespacetbsdatacoalesce;2.1.8创建用户sql>createuserdbuseridentifiedbyOracledefaulttablespacedatatemporarytablespacetempquotaunlimitedondataquota0onsystemquota0ontoolsquota0onusers;sql>grantconnecttodbuser;sql>grantcreateproceduretodbuser;#这些权限足够用于开发及生产环境sql>grantselectondba_pending_transactionstodbuser;#二阶段提交过程中类似Tuxedo的软件需要检索挂起交易的状态,所以必须得到对此视图的select权限,以sys用户身份赋予修改用户可使用alteruserdbuser...参考命令:dropuserdbusercascade;#删除用户及其所有的资料对象revokeconnectfromdbuser;#取消用户角色权限相关系统表:user(dba)_usersuser(dba)_role_privs角色权限user(dba)_sys_privs系统权限user(dba)_tab_privs对其他用户表操作的权限user_ts_quotas表空间限额2.1.9创建资料对象相关系统表:user_catalog(cat)user_objects(obj)表和索引建立在表空间上,如果不指定表空间,使用本用户的缺省表空间(defaulttablespace如果不指定本对象的存储参数,使用建于其上的表空间的缺省存储参数(defaultstorage表(table)建表脚本通常是以下形式:createtableemp(nonumber(12),namechar(20),…,constraintemp_x00primarykey(no))storage(initial100Mnext100Mpctincrease0maxextents5000)pctused70pctfree10tablespacetbs_dataenableprimarykeyusingindextablespacetbs_index;storage选项,存储参数使用建于其上的表空间的缺省存储参数。不同表对扩展块大小的要求,可以通过分析归类,建立相应具有不同缺省存储参数的表空间的方法解决。这样数据库设计就能变得简洁明了。命令简化为:createtableemp(nonumber(12),namechar(20),…,constraintemp_x00primarykey(no))pctused70pctfree10tablespacetbs_dataenableprimarykeyusingindextablespacetbs_index;primarykey关键词建立同名的primarykeyconstraint和uniqueindex,表的每个域都有自身的constraint。相关系统表:user_tables(tabs),dba_tables#表属性user_tab_columns(cols),dba_tab_columns#表各列属性索引(index)createindexemp_x01onemp(name)storage(initial10Mnext10Mpctincrease0maxextents5000)pctfree10tablespacetbs_index;可参照表对storage的处理方式。createindexemp_x01onemp(name)pctfree10tablespacetbs_index;相关系统表:user_indexes(ind),dba_indexes#索引属性user_ind_columns,dba_ind_columns#索引各列属性,以index_position为顺序序列(sequence)createsequenceemp_seqincrementby1startwith1nomaxvaluenocycle;相关系统表:user(dba)_sequences(seq)序列属性视图(view)createemp_depart_viewasselect,emp_fromemp,emp_dutywhere=emp_;相关系统表:user(dba)_views视图属性Oracle将view,sequence,用户参数等定义均存放于系统表空间,而用户创建的表空间仅存放table,indexview,sequence等会被一并删去。2.1.10创建只读用户假定数据库用户dbbrsr需要对dbuser的表emp拥有select权力connectdbusergrantselectonemptodbbrsrconnectdbbrsrcreatesynonymempfor;这样,dbbrsr就能象使用自己的表一样对dbuser的表执行select操作2.1.11激活及关闭数据库实例Oracle用户,dbstart和dbshut激活及关闭optoratab或oratab中设定的数据库实例,dbstart采用normal方式,dbshut采用immediate方式。或者使用手工方式sqlplus“/assysdba”激活normalsql>startupmountsql>startupmount;#DBA库文件的一般性操作sql>完成某些操作sql>alterdatabaseopen;nomountsql>startupnomount;#建controlfilesql>完成某些操作sql>alterdatabaseopen;关闭normalsql>shutdown或sql>shutdowntransactional;#据库immediatesql>shutdownimmediate;#立刻中止每个连接,交易回滚abortsql>shutdownabort;#立刻关闭数据库,不保证交易完整性,在下一次激活打开数据库文件时会进行介质恢复2.1.12网络配置假定某一台机器为client,Oracle_SID为oraclient,数据库用户为dbclient;另一台机器为serverOracle_SID为oraserverdbserver在server上$Oracle_HOME中有以下设定:db_name=oraserverinstance_name=oraserverOracle8iservice_names=oraserverTNSClient端配置修改$Oracle_HOMEadmin/,增加一条PROTOCOL=TCP的记录。Oracle8db_server(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=server)(Port=1521))(CONNECT_DATA=(SID=oraserver)))Oracle8idb_server(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=server)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=oraserver)HOST可在hosts或DNS中配置,或直接写上IP地址sqlplusdbserver/Server端配置修改$Oracle_HOMEadmin/在LISTENER中增加ADDRESS的记录LISTENER=(DESCRIPTION_LIST=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))(ADDRESS=(PROTOCOL=TCP)(HOST=server)(PORT=1521)))))在SID_LIST_LISTENER中增加SID_DESC记录SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(SID_NAME=PLSExtProc)(Oracle_HOME=OracleOracle8.1.5)(PROGRAM=extproc))(SID_DESC=(GLOBAL_DBNAME=oraserver)(Oracle_HOME=OracleOracle8.1.7)(SID_NAME=oraserver)))HOST可在hosts或DNS中配置,或直接写上IP地址注意:LISTENER和SID_LIST_LISTENER是成对出现的,可配置多个监听服务进程和相应的SID_LIST,如LISTENER_1和SID_LIST_LISTENER_DBLink如果client的instance需要在访问本地资料对象同时访问serverinstance中创建对server的数据库连接,实现间接访问在中建立“db_server”配置sqlplusdbclient/passwd1sql>createdatabaselinkserver_linkconnecttodbserveridentifiedbypasswdusing‘db_server’;使用访问server上的emp,如同访问本地instance中的资料对象一样。为了更方便的使用,可建立synonym2.2Oracle9iOracle9i相较于Oracle8&8iOracle8&8i的变化,导致建库操作出现一些不同。在数据库配置文件中有关于回滚表空间的选项,详细情况在“数据库配置”中解释。而且Oracle9i简化了表空间的创建。所以此小节主要描述Oracle9i相对于Oracle8i的差异,其它相同的操作可参考Oracle8i。2.2.1手工创建由于在Oracle9i中工具dbassist的使用方法与在Oracle8i中类似,因此工具建库过程省略,只记录手工建库过程Oracle9i中的建库过程已经变得极为简洁,大致如下:createdatabase${Oracle_SID}usersysidentifiedbysysusersystemidentifiedbysystemlogfilegroup1(‘${Oracle_BASE}${Oracle_SID}/redo01.log’)size10M,group2(‘${Oracle_BASE}${Oracle_SID}/redo02.log’)size10M,group3(‘${Oracle_BASE}${Oracle_SID}/redo03.log’)size10Mmaxlogfiles5maxlogmembers5maxloghistory1maxdatafiles254maxinstances1archivelogcharactersetZHS32GB18030nationalcharactersetAL16UTF16datafile‘${Oracle_BASE}${Oracle_SID}/system01.dbf’size300Mdefaulttemporarytablespacetbstemptempfile‘${Oracle_BASE}${Oracle_SID}/temp01.dbf’size500Mundotablespacetbsundodatafile‘${Oracle_BASE}${Oracle_SID}/undo01.dbf’size500M;其特点为使用专用的回滚和临时表空间,而不象Oracle8i中的那样,回滚和临时表空间与普通表空间没有差异,这样既简化了配置也有利于效能提高。要注意临时表空间的指定文件关键词是tempfile而不是通用的datafile,而且临时表空间的存储选项必须为uniform,由Oracle系统决定。同样回滚表空间也是由Oracle系统决定。不必人工干预。Oracle9i在$Oracle_HOME/dbs下可使用二进制配置文件,缺省为spfile{实例名}.ora,如,支持Oracle系统进程在不重启的情况下动态调整参数,这对要求不间断运行的系统是有利的。在建库阶段就可将此配置文件创建起来。createspfilefrompfile=‘${Oracle_BASE}${Oracle_SID}/init${Oracle_SID}.orapfile,$Oracle_BASEoradb下,执行。2.2.2创建用户表空间Oracle9iextentmanagementdictionaryextentmanagementlocal扩展块的大小(autoallocate64K,这两项都是创建表空间的缺省选项。createtablespacetbsdatadatafile‘…’[extentmanagementlocal][autoallocate];而对于指定每个扩展块大小的创建策略,设立了新选项:统一扩展块大小(uniform[sizexxx[K|M]]autoallocate选项,如果不加上具体的sizexxx[K|M],缺省为1M,这样就不必考虑Oracle8i中的如initial,next,pctincrease,maxextents等defaultstorage参数应如何组合,事实上Oracle8i的这些设置原本就没有什么意义。不能够同时指定extentmanagementlocal和defaultstorage,换言之,defaultstorage只能和extentmanagementdictionary一起显式指定。如果未指定extentmanagement的类型,Oracle9i缺省使用local方式,如果又同时使用defaultstorage选项,就有以下的判断:如果使用minimunextentOracle检查是否minumumextent=initial=next且pctincrease=0,如是,Oracle使用uniform选项,size=initial;如不是,Oracle忽略指定选项,使用autoallocate。如果未指定minimumextent,Oracle检查是否initial=next且pctincrease=0,如是Oracle使用uniform选项,size=initial;如不是Oracle忽略指定选项,使用autoallocate。为了避免与Oracle8i的习惯做法混淆,建议只使用Oracle9i较简洁的方法。对于存储少量静态资料的表空间来说,如配置信息等,可简单地写为:createtablespacetbsdatadatafile‘…’;对于必须关心其扩展块大小的表空间,如大批量的记录或索引,可简单地写为:createtablespacetbsdatadatafile‘…’uniformsize10M;3初始化文件配置所有参见内容都在附件01_install_02_create_03_init/下。描述中各选项。3.1Oracle8&8i具体参见8i/。db_block_size数据库基本数据块尺寸,字节为单位。当涉及到大量资料交换时,例如export/import操作时,此参数对数据库性能有非常大的影响,设定一个较大的值,有利于提高资料吞吐量,但由于dbblock是档和内存之间交换的基本单位,过大的值反而会交换不需要的记录,增加额外的I/O。一般取8k就已能获得较满意效果。db_block_buffers资料缓冲区,db_block_size为单位,不超过1/4内存计算查询缓冲命中率:SELECTname,valueFROMv$sysstatWHEREnameIN(‘dbblockgets’,‘consistentgets’,‘physicalreads’);HitRatio=1–(physicalreads/(dbblockgets+consistentgets))SELECTname,phyrds,phywrtsFROMv$datafiledf,v$filestatfsWHERE#=#dbblockgets:在内存buffer中的命中次数consistentgets:buffer中physicalreads:在数据文件中的读次数HitRatio达到90%以上就可以认为已达到优化,这个数值应在系统运行稳定后进行统计。shared_pool_size资料字典和sql操作缓冲区,字节为单位,不超过1/4内存select(sum(pins–reloads))/sum(pins)“LibCache”fromv$librarycache;select(sum(gets–getmisses–usage–fixed))/sum(gets)“RowCache”fromv$rowcache;select*fromv$sgastatwherename=‘freememory’注意:Cache命中率达到95%以上就可以认为已达到优化,这个数值应在系统运行稳定后进行统计log_checkpoint_interval日志提交点数据量间隔以操作系统block(通常512-byte)sga中dirtybuffer被同步至数据文件,日志切换时也会引起此操作,如设为0,则相当于无限大,此参数失去作用,日志提交仅依靠日志文件的切换。应选择适当大小的日志文件,同时使log_checkpoint_interval略大于日志文件或设为0。原则上应该避免过于频繁的checkpoint操作,控制在30分钟以上为好。推荐此参数设为0。log_buffer线上日志缓冲,字节为单位,512K或128K*CPU数量,取较大值processes和sessionsdedicatedserver模式下每一个连接都有一个Oracle服务进程(process)为之服务,这个连接本身也就是一个会话(sessionsharedserver模式下所有连接共享一个Oracle服务进程池,这样process和session就不再是一一对应,sessions要大于processes。sort_area_size和sort_area_retained_size排序缓冲区,字节为单位。当排序记录被全部取走后,缓冲区缩减到sort_area_retained_size,为减少缓冲区缩放的开销,可使sort_area_size和sort_area_retained_size取相同值。hash_area_sizehashjoin缓冲区,字节为单位,缺省为2*sort_area_size。db_file_multiblock_read_count每次读取的dbblock型的查询。db_writer_processes同步数据进程数,与checkpoint的频率和数据量有关。db_block_lru_latchesLRUCPURedHatLinux6.x下的Oracle8.1.6对smp支持有问题log_archive_start系统激活时是否同时激活归档进程(archivelog_archive_dest_1归档日志目录,最后的标号表明归档线程编号,一般只用1。log_archive_format归档日志名称,%t指归档线程编号,%s指归档日志序列号rollback_segmentsrollbacksegmentpublic必须在系统激活时激活。推荐使用publicrollbacksegment的做法,这个选项可以废弃。background_dump_destOracle系统进程记录log和trc目录。alert_{实例名}.log以文本方式记录系统激活、关闭、出错、存储变化、日志切换等log信息。系统进程以各自名称和进程号记录错误信息,文件以trc为后缀,文本格式。core_dump_destOracle服务进程的coredump目录。user_dump_destOracle服务进程以各自名称和进程号记录错误信息,文件以trc为后缀,文本格式。3.2Oracle9i参见9i/。pga_aggregate_target以K、M、G为单位sort,group-by,hash-join,bitmapmerge,bitmapcreate等对内存有一定需求的sql选项统一动态分配内存区域大小,因此Oracle8i中如sort_area_size,sort_area_retained_size,hash_area_size,bitmap_merge_area_size等选项可以废弃。db_cache_size资料缓冲区,以K、M、G为单位,自动对齐到粒度单位。取代Oracle8i的db_block_buffers选项。undo_managementmanualrollbacksegmentautoOracle9i的回滚表空间。此选项决定了以下关于undo的其它选项。undo_retention已提交资料在回滚表空间中保留时间,以秒为单位,缺省900。当某些较长时间的查询需要通过回滚数据重构老数据块的时候,此选项可使新事务尽可能使用空闲的回滚表空间,这样就减少了查询过程因snapshottooold而失败的几率。然而当空闲回滚表空间不足以应付新事务时,系统仍然会重用此选项保留的空间,因此不能保证长查询一定能成功执行完毕。undo_tablespace指定系统激活时的回滚表空间。4工具所有参见内容都在附件04_tool/下。在《优化》一节中讨论以下工具使用的效率。4.1sqlldr参见sqlldr/。用于将格式化的文本资料上载到表中去以表emp为例首先编写一个控制命令的脚本档,通常以ctl结尾,内容如下:loaddataappendintotableempfieldsterminatedby‘|’(nofloatexternal,namechar(20),ageintegerexternal,dutychar(1),salaryfloatexternal,upd_tsdate(14)‘YYYYMMDDHH24MISS’)括号里对数据文件里每个数据域进行解释,以此在上载时与目标表进行比对。除了appendinsertreplacetruncateappend大同小异,不作更多的解释。再将上载资料组织成数据文件,通常以dat结尾,内容如下:1|Tom|000020|1|0|0002|Jerry|000025|2|0|959分隔符要与ctl檔中fieldsterminatedby指定的一致,这个例子中为“|”ctl和dat档就绪后可以执行上载,命令为:sqlldrdbuser/Oraclecontrol=data=也可以将dat档合并在ctl檔中,ctl档改写为:emp2.ctlloaddatainfile*appendintotableempfieldsterminatedby‘|’(nofloatexternal,namechar(20),ageintegerexternal,dutychar(1),salaryfloatexternal,upd_tsdate(14)‘YYYYMMDDHH24MISS’)begindata3|Mulder|000020|1|0|0004|Scully|000025|2|0|959控制文件中infile选项跟sqlldr命令行中datainfile*则表明资料在本控制文件以begindata开头的区域内。这样命令变成:sqlldrdbuser/Oraclecontrol=emp2.ctlconventionalpath通过常规信道方式上载。rows:每次提交的记录数bindsize:每次提交记录的缓冲区readsize:与bindsize成对使用,其中较小者会自动调整到较大者sqlldr先计算单条记录长度,乘以rows,如小于bindsize,不会试图扩张rows以填充bindsize;如超出,则以bindsize为准。命令为:sqlldrdbuser/Oraclecontrol=log=rows=10000bindsize=directpath通过直通方式上载,不进行sql解析。命令为:sqlldrdbuser/Oraclecontrol=log=direct=true4.2exp参见dmp/exp_。将数据库内的各对象以二进制方式下载成dmp文件,方便资料迁移。buffer:下载资料缓冲区,以字节为单位,缺省依赖操作系统consistent:下载期间所涉及的资料保持readonly,缺省为ndirect:使用直通方式,缺省为nfeeback:显示处理记录条数,缺省为0,即不显示file:输出档,缺省为filesize:输出文件大小,缺省为操作系统最大值indexes:是否下载索引,缺省为n,这是指索引的定义而非数据,exp不下载索引数据log:log档,缺省为无,在标准输出显示owner:指明下载的用户名query:选择记录的一个子集rows:是否下载表记录tables:输出的表名列表下载整个实例expdbuser/Oraclefile=log=full=yconsistent=ydirect=yuser应具有dba权限下载某个用户所有对象expdbuser/Oraclefile=log=owner=dbuserbu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Ketodarolutamide-d6-BAY-1896953-d-sub-6-sub-生命科学试剂-MCE
- 2026年萌动上海测试题及答案
- 2026年小学升级初中测试题及答案
- 2026年机电一体化的笔试题库及答案
- 2026年海关招聘测试题及答案
- 2026年经济学统计测试题及答案
- 2026年安卓单位测试题及答案
- 2026年上海市初中毕业统一学业考试真题(地理)
- 之猜成语游戏题目及答案
- AI在园林工程技术中的应用
- 湖北水利发展集团有限公司招聘笔试题库2026
- 电厂物业应急预案(3篇)
- 2026四川巴中天坛生物通江血浆站招聘护士、医生的备考题库带答案详解(模拟题)
- 2026年中央一号文件解读:农村创业与创新扶持政策
- 水运工程结构防腐蚀施工规范 JTS-T 209-2020
- onenote培训教学课件
- 小学体育跆拳道教学活动设计
- 打胎责任协议书
- 饲料卫生标准培训课件
- 《城镇燃气管网泄漏智能化巡检技术规程》TJFPA 0022-2025
- 南充市人力资源和社会保障局局属参照管理事业单位2025年度公开遴选工作人员(2人)考试参考题库附答案解析
评论
0/150
提交评论