首页 ORACLE系统维护参考手册

ORACLE系统维护参考手册

举报
开通vip

ORACLE系统维护参考手册目录1引言41.1目的41.2系统介绍41.3适用范围41.4术语41.5参考资料41.6注意事项(重要)42准备工作53常见系统配置、维护53.1ORACLE当前库及其监听的启动、关闭53.1.1Oracle的启动53.1.2监听器的启动63.1.3检查监听器服务63.1.4Oracle的关闭63.1.5监听器的关闭63.1.6自动启动和关闭Oracle73.2ORACLE帐户管理83.2.1查询用户信息83.2.2增加用户83.2.3修改用户密码93.2.4删除用户93.3服务命名配置93.4修改内存结构103...

ORACLE系统维护参考手册
目录1引言41.1目的41.2系统介绍41.3适用范围41.4术语41.5参考资料41.6注意事项(重要)42准备工作53常见系统配置、维护53.1ORACLE当前库及其监听的启动、关闭53.1.1Oracle的启动53.1.2监听器的启动63.1.3检查监听器服务63.1.4Oracle的关闭63.1.5监听器的关闭63.1.6自动启动和关闭Oracle73.2ORACLE帐户管理83.2.1查询用户信息83.2.2增加用户83.2.3修改用户密码93.2.4删除用户93.3服务命名配置93.4修改内存结构103.5ORACLE最大链接数两种修改办法103.6导入导出数据113.7ORACLE联机在线日志文件管理113.7.1查询联机在线日志文件信息113.7.2修改数据库联机在线日志文件123.8ORACLE归档日志管理123.8.1检查归档配置123.8.2设置归档模式和取消归档模式133.9ORACLE存储信息143.9.1查询存储信息143.9.2创建表空间153.10修改某用户缺省和临时表空间153.11ORACLE数据库的汉字显示问题163.12ORACLE卸载方法173.12.1UNIX173.12.2WIN174常见开发操作184.1常见表字段名操作184.1.1查看表字段184.1.2增加表字段184.1.3删除表字段184.1.4修改表字段类型194.1.5修改表字段名194.2表操作194.2.1查询表信息194.2.2创建表194.2.3删除表数据(重要)194.2.4删除表214.2.5重命名表214.2.6备份表214.3索引操作214.3.1查询索引信息214.3.2创建索引224.3.3删除索引224.3.4重建索引224.4SQL语句及存储过程优化234.4.1SQL语句是否使用索引234.4.2SQL语句是否使用了最恰当的索引244.4.3怎么提示SQL语句使用固定的索引244.4.4怎么提示SQL语句固定使用全表扫描244.4.5存储过程是否可以执行更少的、有效的SQL语句244.5操作阻塞,锁情况245FAQ255.1操作表数据提示数据文件错误255.2从数据库服务器进程运行中,优化最消耗CPU的SQL语句255.3导数据到新数据库指定用户的缺省表空间265.4正确安装数据库软件,但无法创建库265.5打开数据库报告关闭错误,关闭数据库报告打开错误275.6用户不能在数据库中创建对象275.7导入导出错误275.8不同版本的数据库数据导入导出285.9数据库挂起问题285.10多个数据库操作方法:不同实例间转换.285.11查询错误号信息295.12查看ORACLE系统的版本295.13查看ORACLE系统安装了哪些选项295.14查看ORACLE软件是几位数据库295.15数据库起不来,报告ORA-01157和ORA-01110错误295.16ORACLE目录文件维护30文件修改控制31目录2准备工作oracle9i软件的操作系统安装用户名和密码(用户名一般为oracle,组一般为dba)。oracle数据库的默认管理帐户和密码:帐户system的默认密码为manager帐户sys的默认密码为change_on_install。(登陆方式为:%sqlplus/nologSQL>connsys/change_on_installassysdba此时拥有数据库的最最高级的权限)3常见系统配置、维护3.1oracle当前库及其监听的启动、关闭以下讲的是一个服务器上只运行一个当前数据库的情况,多数据库实例情况参考“FAQ5.8”。3.1.1Oracle的启动1)以安装oracle软件的操作用户登录2)%sqlplus/nolog3)SQL>connect/assysdba4)SQL>startup5)SQL>exit验证:sqlplussystem/managerSQL>selectcount(*)fromtab;能正确查询出数据,即启动成功。3.1.2监听器的启动1)以安装oracle软件的操作用户登陆2)%lsnrctlstart或者使用3)%lsnrctl4)LSNRCTL>start5)LSNRCTL>exit验证:%lsnrctlstatus查看监听器状态报告是否启动。(查看当前服务器提供的监听服务也使用该命令)3.1.3检查监听器服务%lsnrctlstatus3.1.4Oracle的关闭1)以安装oracle软件的操作用户登陆2)%sqlplus/nolog3)SQL>connect/assysdba4)SQL>shutdownimmediate5)SQL>exit验证:使用操作系统命令ps查看oracle后台进程无活动,以system帐户无法登录oracle执行查询操作:查询oracle后台进程:%ps–ef|grepora_查看oracle内存:%ipcs只要关闭了数据库,而系统还有ora_的后台进程和ipcs能查出oracle内存,则该数据库已不正常。需 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 工程部进行处理。(仅适用单服务器单数据库实例情况)登录验证与启动数据库验证一样。3.1.5监听器的关闭1)以安装oracle软件的操作用户登陆2)%lsnrctlstop3)或者使用4)%lsnrctl5)LSNRCTL>stop6)LSNRCTL>exit验证:与监听的启动验证一样。3.1.6自动启动和关闭Oracle可以配置系统,使得系统每次启动时自动启动oracle数据库,每次shutdown时自动关闭oracle数据库;oracle数据库的自动启动是可选的,但是推荐系统每次shutdown时自动关闭ORACLE数据库,因为这样可以防止不正当的关闭ORACLE数据库。ORACLE提供了两个shell文件来支持数据库的自动关闭和启动,他们是位于$ORACLE_HOME/bin的dbshut和dbstart。dbshut和dbstart涉及了oratab文件的相同实体,所以不可能自动启动sid1、sid2、sid3而只自动关闭sid1、sid2,不过可以只用dbshut去自动关闭数据库而不用dbstart,自动启动和关闭oracle数据库。1.编辑/var/opt/oracle/oratab文件oratab文件中数据库实体为以下格式:ORACLE_SID:ORACLE_HOME:{Y|N}最后一个Y|N域指定是否自动关闭和启动数据库,找到要自动启动的数据库(即第一个域ORACLE_SID),然后把最后一个域更改为Y。即:在该文件末尾,有一行为如上格式的具体实例.把后面的参数N修改:Y:Y2.使用超级用户在/etc/init.d/目录中建立dbora文件3.dbora文件的内容如下所示:#!/bin/sh#SetORA_HOMEtobeequivalenttotheORACLE_HOME#fromwhichyouwishtoexecutedbstartand#dbshut#setORA_OWNERtotheuseridoftheownerofthe#OracledatabaseinORA_HOME#使用真实的ORACLE_HOME代替如下路径.和安装用户.ORA_HOME=//app/oracle/product/9.0.1.1ORA_OWNER=oracleif[!-f$ORA_HOME/bin/dbstart]thenecho"Oraclestartup:cannotstart"exitficase"$1"in’start’)#StarttheOracledatabases:#Thefollowingcommandassumesthattheoracleloginwillnot#prompttheuserforanyvaluessu-$ORA_OWNER-c$ORA_HOME/bin/dbstart&;;’stop’)#StoptheOracledatabases:#Thefollowingcommandassumesthattheoracleloginwillnot#promptthe#userforanyvaluessu-$ORA_OWNER-c$ORA_HOME/bin/dbshut&;;esac4.链接该文件使得系统自动启动和关闭数据库#ln-s/etc/init.d/dbora/etc/rc0.d/K10dbora#ln-s/etc/init.d/dbora/etc/rc2.d/S99dbora5.注意:在拷贝此教本的时候,注意编辑,否则执行不成功.6.在重启机器后,仍然需要启动监听.验证:使用reboot进行验证,与oracle的启动验证一样。3.2Oracle帐户管理3.2.1查询用户信息SQL>selectusername,default_tablespace,temporary_tablespace,created,account_statusfromdba_users;3.2.2增加用户1.%su–oracle,或以安装oracle软件的操作用户登陆2.更改ORACLE_SID环境变量为要增加用户的数据库名3.SQL>connect/assysdba4.SQL>createuseruser_nameidentifiedbyuser_passwddefaulttablespacedefault_tablespacetemporarytablespacetemp_tablespacequotaunlimitedondefault_tablespace;建立用户usern_ame,密码为user_password,选择缺省表空间和临时表空间,一般缺省表空间自己建立,最差情况使用USERS表空间,临时表空间使用TEMP.5.SQL>grantconnect,resourcetouser_name;,为user_name分配权限验证:使用该创建了的用户登录,并进行验证中文字符的方法进行验证,如果成功,则创建成功。3.2.3修改用户密码1.以oracle用户登录.2.%sqlplus/nologSQL>connect/assysdbaSQL>alteruserUSER_NAMEidentifiedbyUSER_PASSWD;验证:使用该用户与修改了的密码登录,登录成功即修改密码成功。3.2.4删除用户删除用户时候,会从数据字典中删除该用户及其相关的模式,同时,如果在该模式中包含任何模式对象,也将立即删除.使用cascade选项删除该用户以及所有相关的对象和依赖于该用户的外键:1.以oracle用户登录.2.%sqlplus/nologSQL>connect/assysdbaSQL>dropuseruser_namecascade;验证:在删除前用该用户登录成功,在删除后,再使用该用户登录进行验证,如果失败即表示删除成功或用户已被lock。或者使用SQL>selectusernamefromdba_userswhereusername=’被删除用户名大写’没有查询出 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 即可。3.3服务命名配置用OracleNemanager配置服务命名:1.在$ORACL_HOME/bin目录下运行netmgr启动OracleNetmanager.2.在导航窗格,展开Local>ServiceNaming.(服务命名)3.在工具条里单击+。网络服务名称向导启动。4.在网络服务名称域里输入名称(任何用户想设定的名称,一般设置为与目标数据库相同名称),然后单击Next.5.选择客户端将要监听的 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 (该协议必须已安装在客户端上)。单击Next.6.在提供的域里为所选择的协议输入适当的协议参数,然后单击呢Next.7.输入目的服务(主机名选择客户端的IP,端口号选择对方启动的监听端口号),然后单击Next.8.输入对方数据库服务名,设置为对方数据库名.9.单击Test,验证网络服务名称能否正常工作,然后单击Next.如果测试不成功:确认目标数据库和监听者正在运行,然后单击Test.单击ChangLogin来改变连接的用户名称和密码,然后单击Test.10.击Close关闭连接测试对话框。11.单击Finish保存配置,并关闭服务名称向导。验证:使用该服务名进行连接进行测试,如果成功,则表示配置成功:SQL>sqlplusHYPERLINK"mailto:username/passwd@net_service_name"username/passwd@net_service_nameSQL>selectcount(*)fromtab;等操作如果成功,即表示配置成功。3.4修改内存结构如果在创建数据库时,没有对内存进行设置,可在安装完成后,按需要对数据库的一些内存等参数进行修改:修改方法:可通过altersystemset语句修改;也可通过创建pfile转化为spfile修改.Altersystemset语句:altersystemset参数表达式scope=spfile;Pfile转化为spfile:SQL>createspfile=”$ORACLE_BASE/oradata/ORACLE_SID/spfile/ORACLE_SID.ora”frompfile=”$ORACLE_BASE/oradata/ORACLE_SID/initORACLE_SID.ora”需修改选项和修改内容为如下:#SGA_MAX_SIZE一般设置为物理内存的2/3.此处设置为4G*.SGA_MAX_SIZE=4294967296*.db_cache_size=524288000*.db_file_multiblock_read_count=8*.db_files=160*.fast_start_mttr_target=900*.java_pool_size='786432000'*.large_pool_size='10485760'*.log_buffer=4194304*.log_checkpoint_interval=50000*.open_cursors=900*.parallel_max_servers=8*.processes=200*.shared_pool_size=786432000*.sort_area_size=5242880验证:使用如下命令,查找相关内存配置是否满足配置要求:SQL>showparameters3.5Oracle最大链接数两种修改办法1.修改initORACLE_SID.ora参数文件,但是必须带参数启动数据库才有效。修改$ORACLE_HOME/dbs/initORACLE_SID.ora文件中的processes参数的值,然后带参数重新启动数据库即可(SQL>startuppfile=/$ORACLE_HOME/oradata/ORACLE_SID/initORACLE_SID.ora)。(修改的数值可以参考$ORACLE_HOME/dbs/init.ora 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 文件的提示)2.使用oracle9i的新特性,使用spfile.Altersystemsetprocesses=数值scope=spfile;重启数据库即可.如果不习惯使用spfile,可在安装后把$ORACLE_HOME/dbs/spfileORACLE_SID.ora删除即可.此时数据库将使用pfile,即原来的initORACLE_SID.ora文件.验证:与“修改内存结构”的验证方法一样。3.6导入导出数据整个数据库导入导出:导出:expdbauser/dbapasswd@ORACLE_SIDfile=exp_filenamelog=exp_logfilefull=y导入:impdbauser/dbapasswd@ORACLE_SIDfull=yignore=yfile=exp_filenamelog=exp_logfile按用户导入导出:导出:expdbauser/dbapasswd@ORACLE_SIDfile=exp_filenamelog=exp_logfileowner=exp_username导入:impdbauser/dbapasswd@ORACLE_SIDfile=exp_file_namelog=exp_logfilefromuser=exp_usertouser=imp_user其中方括号内的内容规定如下:dbauser:具有DBA权限的Oracle用户名dbapasswd:dbauser的用户密码sid:Oracle服务名exp_file_name:导出数据文件的文件名exp_logfile:导出日志exp_user:导出数据文件的用户名。Imp_user:准备要将数据导入的用户名。验证:导出验证:使用在本机进行导入和在bin模式下FTP到其他机器进行相关导入验证。导入验证:morelog文件查询导入是否成功。3.7Oracle联机在线日志文件管理3.7.1查询联机在线日志文件信息SQL>select*fromv$log;SQL>select*fromv$logfile;3.7.2修改数据库联机在线日志文件如果没有在创建数据库时把redo日志文件大小设置成5M,和分为5个组,每组两个redo日志文件.则需要使用如下方法进行设置.一般默认安装后,的redo日志文件都为三组三个.则增加4组和5组,每组两个日志文件,且大小为5M,命名为redo04.log,redo14.log和redo05.log,redo15.log.使用日志切换,把当前活动日志切换到4组.则把1,2,3组drop掉.再用手工删除该对应的redo日志文件.创建1,2,3组,文件命名分别为:redo01.log,redo11.log和redo02.log,redo12.log和redo03.log,redo13log.大小都为5M.创建日志组,且一起创建日志文件,使用如下命令:SQL>alterdatabaseaddlogfilegroupX(‘$ORACLE_BASE/oradata/ORACLE_SID/redo0X.log’,’$ORACLE_BASE/oradata/ORACLE_SID/redo1X.log’)size5M;查看当前日志状态和日志切换使用如下命令:SQL>select*fromv$log;SQL>altersystemswitchlogfile;删除旧的日志文件使用如下命令:SQL>alterdatabasedroplogfilegroupX;手动删除对应的日志文件使用系统删除命令.(如果文件已经损坏,则可使用如下方法(保守方法:alterdatabaseclearlogfilegroupX;):alterdatabaseclearunarchivedlogfilegroupX;清除,再drop.不进行归档,此时需要进行做一个备份,否则数据库将不能使用其进行恢复.)验证:使用SQL命令查询修改结果是否符合修改要求。SQL>selectnamefromv$log;3.8Oracle归档日志管理3.8.1检查归档配置%sqlplus/nologSQL>archiveloglist信息如下(有可能以中文显示):SQL>archiveloglistDatabaselogmodeArchiveMode//说明是否为归档模式,此处是归档模式AutomaticarchivalEnabled//自动归档进程是否启动,此处是自动启动Archivedestination/usr5/archive//说明第一归档目标,此处是/usr5/archiveOldestonlinelogsequence51402//说明就的联机在线日志序号Nextlogsequencetoarchive51404Currentlogsequence51404SQL>若要查看是否设置了其他归档目标,则使用如下命令检查:SQL>showparameterslog_archive_dest3.8.2设置归档模式和取消归档模式数据库运行模式分为归档和不归档模式.一般在确认有足够的空间存放归档日志文件才使用归档模式设置数据库(推荐:至少有用户数据的4倍以上的空闲空间,才使用归档模式)3.8.2.1设置归档模式归档模式的修改,可使用oracle9i的新特性,使用spfile,通过altersystemset语句完成.配置归档模式:配置好归档属性把数据库放入归档模式检查归档是否满足要求1)配置好归档属性a)设置归档目标%su–oracle,或以oracle用户登陆更改ORACLE_SID环境变量为要增加用户的数据库名SQL>connect/assysdba假如需要放入归档文件的路径为$ORACLE_ARCH_1和$ORACLE_ARCH_2,则进行如下设置归档目标:SQL>altersystemsetlog_archive_dest_1=”Location=/$ORACLE_ARCH_1”scope=spfile;SQL>altersystemsetlog_archive_dest_2=”Location=/$ORACLE_ARCH_2”scope=spfile;b)设置归档进程启动oracle自动归档的进程,进行如下设置:SQL>altersystemsetlog_archive_start=turescope=spfile;c)设置归档文件名称设置好归档文件的名称,一般需要带上SN号,可配置如下:SQL>altersystemsetlog_archive_format=”SID_T%TS%S.ORA”2)把数据库放入归档模式正常关闭数据库shutdown放入归档模式SQL>startupmountSQL>alterdatabasearchivelog打开数据库SQL>alterdatabaseopen;3)检查归档属性SQL>archiveloglist查看归档目标是否设置正确,归档进程是否已经启动.数据库是否已经处于归档状态验证:使用检查归档属性的方法进行验证,从报告中即可得出是否配置成功。3.8.2.2取消归档模式先检查数据库是否已经放入归档模式运行,如果已经是归档模式运行,则按照如下方法取消归档模式:取消归档模式%su–oracle,或以oracle用户登陆更改ORACLE_SID环境变量为要增加用户的数据库名SQL>connect/assysdba检查是否处于归档模式SQL>archiveloglist正常关闭数据库SQL>shutdown把数据库放入非归档模式SQL>startmountSQ.L>alterdatabasenoarchivelog打开数据库SQL>alterdatabaseopen;停止归档进程SQL>archivelogstop取消归档进程自动启动SQL>altersystemsetlog_archive_start=falseScope=spfile;验证:使用检查归档属性的方法进行验证,从报告中即可得出是否配置成功。3.9Oracle存储信息3.9.1查询存储信息SQL>select*fromdba_tablespaces;//检查逻辑空间信息SQL>select*fromdba_data_files;//检查逻辑空间与物理空间的信息SQL>select*fromv$datafile;//检查物理存储文件的信息3.9.2创建表空间以oracle用户登录,执行如下命令创建表空间和该表空间的数据文件%sqlplus/nolog%connect/assysdbaSQL>createtablespacetablespace_namedatafile‘/$ORACLE_BASE/oradata/ORACLE_SID/datafile_name01.dbf’size1000Mautoextendonnext1000Mmaxsizeunlimitedminimumextent25Mdefaultstorage(initial50Mnext50Mminextents1maxextentsunlimitedpctincrease0);-----------黑体部分为可修改部分,其中,最好只修改tablespace_name,和数据文件路径和数据文件名称(最好与其他数据文件放在一起),除了名称与路径,最好不要做其他修改。给表空间添加数据文件:SQL>altertablespacetablespace_nameadddatafile‘/$ORACLE_BASE/oradata/ORACLE_SID/datafile_name01.dbf’size1000M;验证:使用SQL命令查询是否已经创建成功。SQL>selecttablespace_namefromv$tablespaces;3.10修改某用户缺省和临时表空间如果在创建用户时,没有指定缺省和临时表空间,则默认都为SYSTEM表空间。修改用户缺省表空间:SQL>alterusersystemdefaulttabspaceUSERS;修改用户临时表空间:SQL>alterusersystemtemporarytabspaceTEMP;验证:使用SQL>select*fromdba_userswhereusername=’被修改用户名大写’;查看即可。3.11Oracle数据库的汉字显示问题注意在oracle的使用过程中,如果字符集出现错误.版本在oracle7以下的,则允许用以下方法修改;如果是oracle8版本,则需要使用其他的命令修改,且原来设置的语言必须为美国英语;对于9版本.则必须重新创建数据库.在创建数据库的过程中设置正确的字符集.Oracle7版本字符集修改办法在SQL*Plus中insert进的都是中文的,为什么一存入服务器后,再select出的就是???了?•错误现象:1、有的时候,服务器数据先导出,重装服务器,再导入数据,结果,发生数据查询是出现的是???。2、有时,服务器设置就有问题,字符集设成单字节了。•错误原因:一般这种问题产生的原因是因为字符集设置不对造成的。•解决方法:1、检查服务器上Oracle数据库的字符集,检查的方法如下:SQL>connect/assysdba连接成功.SQL>descprops$列名可空值否类型-------------------------------------------NAMENOTNULLVARCHAR2(30)VALUE$VARCHAR2(2000)COMMENT$VARCHAR2(2000)SQL>colvalue$formata40SQL>selectname,value$fromprops$;NAMEVALUE$-------------------------------------------------------DICT.BASE2NLS_LANGUAGEAMERICANNLS_TERRITORYAMERICANLS_CURRENCY$NLS_ISO_CURRENCYAMERICANLS_NUMERIC_CHARACTERS.,NLS_DATE_FORMATDD-MON-YYNLS_DATE_LANGUAGEAMERICANNLS_CHARACTERSETZHS16GBKNLS_SORTBINARYNLS_CALENDARGREGORIANNLS_RDBMS_VERSION7.3.4.0.0GLOBAL_DB_NAMEORACLE.WORLDEXPORT_VIEWS_VERSION3查询出记录.NLS_CHARACTERSET这个参数应该是ZHS16GBK,如不是,需要修改成此值,修改的方法如下,SQL*Plus中修改方法:SQL>updateprops$setvalue$='新字符集'wherename='NLS_CHARACTERSET';操作系统中修改方法:connect/assysdbaalterdatabaseSIDcharactersetZHS16GBK;alterdatabaseSIDnationalcharactersetZHS16GBK;注意修改数据库字符集后需要重启数据库。2、检查操作系统WINDOWS中Oracle汉字显示的字符集,检查方法如下:运行regedit,定位到:HKEY_LOCAL_MACHINESOFTWAREORACLE找到以下字符串:NLS_LANG检查是否以下内容,如不是,改之,修改方法如下:SIMPLIFIEDCHINESE_CHINA.ZHS16GBK注意修改数据库字符集后需要重启数据库。3.12oracle卸载方法3.12.1UNIXa)使用安装向导工具卸载b)删除安装目录c)删除/var/opt/目录下的oracle目录d)卸载完成3.12.2WINe)使用安装向导工具卸载f)用ControlPanel(控制面板)中的Services应用程序停止所有ORACLE服务。g)运行regedit,选择HKEY_LOCAL_MACHINESOFTWAREORACLE,按del键删除这个入口。h)选择HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices,滚动这个列表,并删除所有ORACLE入口i)从桌面上、STARTUP组中删除所有有关ORACLE的组和图标j)删除与ORACLE有关的文件,选择ORACLE所在的缺省目录c:orant,删除这个入口目录及所有子目录,k)并从WINDOWSNT目录(一般为c:winnt)下删除以下文件ORACLE.INIORADIM80.INIl)WIN.INI文件中若有[ORACLE]的标记段,删除该段4常见开发操作4.1常见表字段名操作4.1.1查看表字段SQL>desc表名如:SQL>showuserUSERis"dbuser"SQL>descdbuser2.xtbmNameNull?Type-----------------------------------------------------------------------------XTBMNOTNULLVARCHAR2(20)XTXXVARCHAR2(50)THETYPEVARCHAR2(10)DESCRIPTIONVARCHAR2(200)REMARKVARCHAR2(100)SQL>4.1.2增加表字段例:SQL>altertablene_pcfadd(adminstateinteger,alarmstatusinteger);(此操作不会修改原有字段的数据,新添加字段数据为空)4.1.3删除表字段例:SQL>altertabletable_namedrop(system_title,net_title,obj_id,ne_dn);(此操作不会影响其他字段的数据,直接删除所列字段名及所有数据)4.1.4修改表字段类型例:SQL>altertablene_aaamodify(sw_versionvarchar2(255));注意:修改字段类型为不同的数据类型,如从char变到int,则需要该字段的所有数据为空。同类类型修改,如从char(10)变为char(20),char(30)到varchar2(30)等变化,不会影响已有数据。4.1.5修改表字段名可行的办法:createtable表名(字段名,字段名,字段名…..)select字段名,字段名,字段名….From表名使用上述语句创建需要的新表,检查符合要求,数据无丢失后,drop掉原来的表,再把新表改名为原来的表名即可。相关操作语句本章查找。4.2表操作4.2.1查询表信息查询当前用户所拥有的表名、表所使用的表空间、表创建时间、表大小SQL>selects.segment_name,s.tablespace_name,o.created,s.bytes/1024/1024astable_size_Mfromuser_segmentss,user_objectsowhereo.object_type='TABLE'ands.segment_type='TABLE'ando.object_name=s.segment_name;(查询当前用户的表的信息)4.2.2创建表例:SQL>createtablet2(envarchar(100),intrint)tablespacedbmonitor;(创建表的时候请指定表空间)4.2.3删除表数据(重要)删除表数据的方法:删除表所有数据的最快速方法SQL>truncatetable表名;(此方法系统不记录日志,一但删除,将不可恢复)删除满足指定条件的大表的数据对于大数据量的表,比如告警表,采集原始表,最好编写一procedure进行删除,小批量删除提交后再进行小批量删除提交,直到满足要求。Procedure范例如下(在SQL>提示符号下,先运行SQL>setserveroutputon,以便存储过程输出处理结果):v_table_name:被删除的表名v_once_delete_row_num:一次删除的行数v_condition:删除表的where条件createorreplaceproceduredelete_table(v_table_namevarchar2,v_once_delete_row_numvarchar2,v_conditionvarchar2)aspragmaautonomous_transaction;v_deletenumber:=0;beginwhile1=1loopEXECUTEIMMEDIATE'deletefrom'||v_table_name||'where'||v_condition||‘andrownum<=:cnt’USINGv_once_delete_row_num;ifSQL%NOTFOUNDthenexit;elsev_delete:=v_delete+SQL%ROWCOUNT;endif;commit;endloop;commit;DBMS_OUTPUT.PUT_LINE('删除操作结束!');DBMS_OUTPUT.PUT_LINE('一共删除了'||to_char(v_delete)||'条记录');end;/例如:SQL>settimingonSQL>execdelete_table('alarminfo_bk','1000','alarmnumber=0000191105786406');删除操作结束!一共删除了1条记录PL/SQL过程已成功完成。已用时间:00:03:26.41SQL>删除时间虽然还是比较长,但可以保证部分大批量无控制删除时的出错和消耗UNDO等的性能消费。4.2.4删除表SQL>droptable表名;4.2.5重命名表SQL>rename表1to表2;4.2.6备份表备份成其他名称的表SQL>createtable表名1asselect*from表名2;备份成数据文件%exp表所属用户名/密码@服务名file=定义文件名称.datlog=定义日志文件名称tables=表名备份表结构没办法,要么:1)使用如TOAD等工具进行导出备份。2)使用exp的方法导出数据,再使用imp的方式导入数据库,只是此时一定要在imp语句末尾加上show=y,并且写入日志文件。这样才可以在日志文件中观察表结构(导出的表结构不能直接使用,需要整理)。如:%expHYPERLINK"mailto:dbuser2/dbuser2@userdb"dbuser2/dbuser2@userdbfile=a.dattables=ne_msc%impHYPERLINK"mailto:dbuser2/dbuser2@userdb"dbuser2/dbuser2@userdbfile=a.datlog=a.logfull=yshow=y4.3索引操作4.3.1查询索引信息查询某表所有索引及每个索引使用的字段SQL>selectindex_name,column_namefromuser_ind_columnswheretable_name='表名大写'orderbyindex_name;查询某索引所使用的表空间、索引大小通过从上面查询到的索引名称,可继续查询索引详细信息SQL>selectsegment_name,tablespace_name,bytes/1024/1024asindex_size_Mfromuser_segmentswheresegment_type='INDEX'andsegment_name='索引名称大写';(查询当前用户的表的索引信息)4.3.2创建索引(注意:1)虽然主键仅是一种唯一、非空的约束而已,但创建(删除)方法与创建一般约束有所不同。2)只要索引名称不重复,索引字段完全一样,就允许创建无穷多个索引)创建主键例:SQL>altertabletabname_routeraddprimarykey(ne_id,port_id,start_time,stop_time);创建唯一索引例:SQL>createuniqueindexinx_o_tabname_vlr_tempono_tabname_vlr_temp(ne_id,start_time,stop_time)tablespacerperfdbs;创建非唯一索引例:createuniqueindexidx_bbont2(aisnotnull,b);(可在创建的语句中指定索引使用某个表空间)4.3.3删除索引删除主键例:SQL>altertabletabname_routerdropprimarykey;创建(非)唯一索引例:SQL>dropindexidx_bb;4.3.4重建索引一般重建方法SQL>alterindex索引名称rebuild;(如果这样重建失败,则采用下面的方法)其他重建方法1)记录该索引的属性(如是否主键,是否非空,是否唯一等)。2)drop该索引。3)create该索引。(具体语句的语法请参考本章)4.4SQL语句及存储过程优化4.4.1SQL语句是否使用索引使用执行该SQL语句的用户,执行sqlplus的方式登陆数据库SQL>执行如下语句:SQL>setautotracetraceonlyexplainSP2-0613:UnabletoverifyPLAN_TABLEformatorexistenceSP2-0611:ErrorenablingEXPLAINreport如果遇到如上错误,则执行如下语句(如没遇到错误,则不需要执行如下语句):SQL>@${ORACLE_HOME}/rdbms/admin/utlxplan此时输入欲查询是否使用索引的SQL语句,如:SQL>setautotracetraceonlyexplain;SQL>selectcount(*)fromSERVICE_MONTHLY_REPORT2;ExecutionPlan----------------------------------------------------------0SELECTSTATEMENTOptimizer=CHOOSE10SORT(AGGREGATE)21TABLEACCESS(FULL)OF'SERVICE_MONTHLY_REPORT2'SQL>如通过FULL 标识 采样口标识规范化 下载危险废物标识 下载医疗器械外包装标识图下载科目一标识图大全免费下载产品包装标识下载 ,我们知道查询该表时没有使用索引。又如:SQL>selectne_idfromo_tabname_stp;ExecutionPlan----------------------------------------------------------0SELECTSTATEMENTOptimizer=CHOOSE(Cost=1Card=1Bytes=18)10INDEX(FULLSCAN)OF'INX_O_tabname_STP'(UNIQUE)通过FULLSCAN知道是索引扫描,而且使用的是INX_O_tabname_STP索引。4.4.2SQL语句是否使用了最恰当的索引通过“4.4.1”,判断是否关键被判断的字段,和查询的字段都在索引里,如果是,则一般是使用了恰当的索引。4.4.3怎么提示SQL语句使用固定的索引/*+INDEX(tabname_CELLCIRCUIT)*/4.4.4怎么提示SQL语句固定使用全表扫描/*+FULL(o_tabname_stp)*/例:通过如下两个执行计划可知道提示生效SQL>selectne_idfromo_tabname_stp;ExecutionPlan----------------------------------------------------------0SELECTSTATEMENTOptimizer=CHOOSE(Cost=1Card=1Bytes=18)10INDEX(FULLSCAN)OF'INX_O_tabname_STP'(UNIQUE)SQL>SQL>select/*+FULL(o_tabname_stp)*/ne_idfromo_tabname_stp;ExecutionPlan----------------------------------------------------------0SELECTSTATEMENTOptimizer=CHOOSE(Cost=2Card=1Bytes=18)10TABLEACCESS(FULL)OF'O_tabname_STP'(Cost=2Card=1Bytes=18)4.4.5存储过程是否可以执行更少的、有效的SQL语句1)确保所有应该使用索引的SQL语句都使用了索引。2)通过设计判断,减少SQL语句的执行次数。3)努力减少执行次数多的SQL语句。4.5操作阻塞,锁情况由于锁情况比较复杂,此处只讲已知某个在操作的用户出现锁的情况。通过如下语句,查询出当前在被锁的表,表所属用户,操作系统用户名,通过这些信息,判断找出制造死锁的会话sid。SQL>selecto.owner,o.object_name,l.session_id,l.os_user_namefromv$locked_objectl,dba_objectsowhereo.object_id=l.object_id;通过sid,使用如下语句,查找出数据库服务器上操作系统的后台连接进程或直接使用SQL语句杀死该会话。1)查找数据库服务器后台进程:SQL>selectspidfromv$processwhereaddr=(selectpaddrfromv$sessionwheresid=&sid);如上语句,输入session的sid,即可查找相应的数据库服务器后台进程,直接使用%kill-9命令杀掉该进程即可。2)使用SQL语句杀掉该会话:SQL>altersystemkillsession'sid,serial#';Sid,serial#可以从v$session视图查出。5FAQ5.1操作表数据提示数据文件错误通过检查,判断数据文件状态:数据文件状态不是ONLINE或SYSTEM请提交工程部或数据库组处理。检查文件状态方法可通过dbMonitor查看,也可通过“3.9.1”小节方法查看。数据文件状态是ONLINE1)验证该操作表数据的语句错误再次出现。2)使用setautotracetraceonlyexplain的方法检查该语句是否使用索引。3)若使用了索引:则使用/*+FULL(表名)*/的提示方法,选择表表操作判断是否问题依然出现。若问题不出现,则drop该操作使用的索引,重新创建该索引;若问题出现,则exp表数据,drop条,重新创建表。(若是同时操作多个表,则一个表一个表的使用/*+table=表名index=索引名*/的提示方法指定表单独使用索引,逐个排查)使用setautotracetraceonlyexplain的方法和使用表提示的方法,请参考“4.4.1”。5.2从数据库服务器进程运行中,优化最消耗CPU的SQL语句%prstat获取PROCESS行为oracle字样,CPU超过1%的行的PID,此时使用%sqlplus“/assysdba”----登陆数据库服务器SQL>---------执行如下SQL语句SELECT/*+ORDERED*/sql_textFROMv$sqltextaWHERE(a.hash_value,a.address)IN(SELECTDECODE(sql_hash_value,0,prev_hash_value,sql_hash_value),DECODE(sql_hash_value,0,prev_sql_addr,sql_address)FROMv$sessionbWHEREb.paddr=(SELECTaddrFROMv$processcWHEREc.spid='&pid'))ORDERBYpieceASC;系统会提示你输入PID的值:---输入刚才准备的PID值SQL>-----此时就会查出正在消耗CPU的语句。使用SQL语句优化的方法优化此SQL语句。5.3导数据到新数据库指定用户的缺省表空间我们常常从某台服务器的一个数据库exp导数据到另外一台服务器的一个数据库,发现imp后,很有可能没有使用新数据库的导入用户的缺省表空间。使用语句:SQL>selecttable_name,tablespace_namefromuser_tables;可以查出表使用的表空间。那是因为我们创建用户的时候,没有回收被创建用户对表空间的unlimitedtablespace权限,我们使用语句SQL>revokeunlimitedtablespacefrom用户名;收回用户的unlimitedtablespace权限,此时再在默认缺省表空间上分配该权限:SQL>alteruser用户名quotaunlimitedon缺省表空间名;再导入测试,如果还不行,发现总是导入到某个表空间ABC上,则使用如下语句:SQL>alteruser用户名quota0onABC;回收用户在该表空间的配额分配权限,重新导入,则一定可以矫正过来。5.4正确安装数据库软件,但无法创建库现象:在UNIX正确安装oracle9i后,提示安装成功,但不能使用,提示OS错误分析:由于操作系统自己和硬件的原因,导致oracle的使用受到限制。处理:可通过如下两种方法解决:1.把启动参数processes参数修改的更底(降低一倍)。2.增加/etc/system文件中SEMMSL&SEMMNI的参数值(增加一倍)。Reboot系统再启动数据库。5.5打开数据库报告关闭错误,关闭数据库报告打开错误现象:数据库不可用,ORACLE关闭时报告数据库已经打开打开,打开数据库时报告数据库已经关闭。分析:一般这种情况是因为非正常关闭数据库造成,即一般使用abort参数。还有就是实际用户定义的$ORACLE_SID与实际创建时候的SID不一样,这样系统找不到当前SID为启动SID,报告错误。处理:A)检查.cshrc中配置的$ORACLE_SID与用户在用户已经创建了的数据库SID范围内。B)把需要启动的数据库SID设置成当前系统默认SID,使用setenvORACLE_SIDSID,这样只在当前窗口有效。关闭该窗口即无效。C)使用ipcs查看当前内存等中是否有残留内存等信息,如果有,使用ipcrm–m清除共享内存,使用ipcrm–s清除下一个。保证清除干净。D)检查后台进程,如果有在运行,直接使用kill-9杀掉即可。查看:ps–ef|grepora_E)此时再去打开数据库即可。5.6用户不能在数据库中创建对象现象:用户以前能正确在数据库中创建对象,突然不能创建用户对象。分析:此问题是因为在创建用户的时候没有分配配额,用户使用到一定时候后,就不能再创建对象了。处理:设置用户配额为无限制。SQL>alteruseruser_namequotaunlimitedonuser_default_tablespace;5.7导入导出错误
本文档为【ORACLE系统维护参考手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
百万精品文库
暂无简介~
格式:doc
大小:155KB
软件:Word
页数:42
分类:企业经营
上传时间:2022-05-29
浏览量:0