ORACLE系统维护参考手册.doc_第1页
ORACLE系统维护参考手册.doc_第2页
ORACLE系统维护参考手册.doc_第3页
ORACLE系统维护参考手册.doc_第4页
ORACLE系统维护参考手册.doc_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录1 引言 41.1 目的 41.2 系统介绍 41.3 适用范围 41.4 术语 41.5 参考资料 41.6 注意事项(重要) 42 准备工作 53 常见系统配置、维护 53.1 ORACLE当前库及其监听的启动、关闭 53.1.1 Oracle的启动 53.1.2 监听器的启动 63.1.3 检查监听器服务 63.1.4 Oracle的关闭 63.1.5 监听器的关闭 63.1.6 自动启动和关闭Oracle 73.2 ORACLE帐户管理 83.2.1 查询用户信息 83.2.2 增加用户 83.2.3 修改用户密码 93.2.4 删除用户 93.3 服务命名配置 93.4 修改内存结构 103.5 ORACLE最大链接数两种修改办法 103.6 导入导出数据 113.7 ORACLE联机在线日志文件管理 113.7.1 查询联机在线日志文件信息 113.7.2 修改数据库联机在线日志文件 123.8 ORACLE归档日志管理 123.8.1 检查归档配置 123.8.2 设置归档模式和取消归档模式 133.9 ORACLE存储信息 143.9.1 查询存储信息 143.9.2 创建表空间 153.10 修改某用户缺省和临时表空间 153.11 ORACLE数据库的汉字显示问题 163.12 ORACLE卸载方法 173.12.1 UNIX 173.12.2 WIN 174 常见开发操作 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.4 SQL语句及存储过程优化 234.4.1 SQL语句是否使用索引 234.4.2 SQL语句是否使用了最恰当的索引 244.4.3 怎么提示SQL语句使用固定的索引 244.4.4 怎么提示SQL语句固定使用全表扫描 244.4.5 存储过程是否可以执行更少的、有效的SQL语句 244.5 操作阻塞,锁情况 245 FAQ 255.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.16 ORACLE目录文件维护 30文件修改控制 31目录2 准备工作 oraclen 9i软件的操作系统安装用户名和密码(用户名一般为oracle,组一般为dba)。 oracle数据库的默认管理帐户和密码:nl 帐户system的默认密码为manager 帐户sys的默认密码为change_on_install。l(登陆方式为:%sqlplus /nologSQLconn sys/change_on_install as sysdba此时拥有数据库的最最高级的权限)3 常见系统配置、维护3.1 oracle当前库及其监听的启动、关闭以下讲的是一个服务器上只运行一个当前数据库的情况,多数据库实例情况参考 “FAQ 5.8”。3.1.1 Oracle的启动1) 以安装oracle软件的操作用户登录2) sqlplus /nolog3) SQLconnect /as sysdba4) SQLstartup5) SQLexit验证:sqlplus system/managerSQLselect count(*) from tab;能正确查询出数据,即启动成功。3.1.2 监听器的启动1) 以安装oracle软件的操作用户登陆2) %lsnrctl start或者使用3) %lsnrctl4) LSNRCTL start5) LSNRCTLexit验证:%lsnrctl status 查看监听器状态报告是否启动。(查看当前服务器提供的监听服务也使用该命令)3.1.3 检查监听器服务%lsnrctl status3.1.4 Oracle的关闭1) 以安装oracle软件的操作用户登陆2) sqlplus /nolog3) SQLconnect /as sysdba4) SQLshutdown immediate5) SQLexit验证:使用操作系统命令ps查看oracle后台进程无活动,以system帐户无法登录oracle执行查询操作:查询oracle后台进程:%ps ef | grep ora_ 查看oracle内存:%ipcs 只要关闭了数据库,而系统还有ora_的后台进程和ipcs能查出oracle内存,则该数据库已不正常。需通知工程部进行处理。(仅适用单服务器单数据库实例情况)登录验证与启动数据库验证一样。3.1.5 监听器的关闭1) 以安装oracle软件的操作用户登陆2) %lsnrctl stop3) 或者使用4) %lsnrctl5) LSNRCTL stop 6) LSNRCTLexit验证:与监听的启动验证一样。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# Set ORA_HOME to be equivalent to the ORACLE_HOME# from which you wish to execute dbstart and# dbshut# set ORA_OWNER to the user id of the owner of the# Oracle database in ORA_HOME#使用真实的ORACLE_HOME代替如下路径.和安装用户.ORA_HOME=/app/oracle/product/ORA_OWNER=oracleif ! -f $ORA_HOME/bin/dbstartthenecho Oracle startup: cannot startexitficase $1 instart)# Start the Oracle databases:# The following command assumes that the oracle login will not # prompt theuser for any valuessu - $ORA_OWNER -c $ORA_HOME/bin/dbstart &;stop)# Stop the Oracle databases:# The following command assumes that the oracle login will not # prompt the# user for any valuessu - $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.2 Oracle帐户管理3.2.1 查询用户信息SQLselect username,default_tablespace,temporary_tablespace,created,account_status from dba_users;3.2.2 增加用户1. % su oracle,或以安装oracle软件的操作用户登陆2. 更改ORACLE_SID环境变量为要增加用户的数据库名3. SQL connect /as sysdba4. SQLcreate user user_name identified by user_passwddefault tablespace default_tablespacetemporary tablespace temp_tablespacequota unlimited on default_tablespace;建立用户usern_ame,密码为user_password,选择缺省表空间和临时表空间,一般缺省表空间自己建立,最差情况使用USERS表空间,临时表空间使用TEMP.5. SQL grant connect,resource to user_name;,为user_name分配权限验证:使用该创建了的用户登录,并进行验证中文字符的方法进行验证,如果成功,则创建成功。3.2.3 修改用户密码1.以oracle用户登录.2.%sqlplus /nologSQLconnect /as sysdbaSQLalter user USER_NAME identified by USER_PASSWD;验证:使用该用户与修改了的密码登录,登录成功即修改密码成功。3.2.4 删除用户删除用户时候,会从数据字典中删除该用户及其相关的模式,同时,如果在该模式中包含任何模式对象,也将立即删除.使用cascade选项删除该用户以及所有相关的对象和依赖于该用户的外键:1.以oracle用户登录.2.%sqlplus /nologSQLconnect /as sysdbaSQLdrop user user_name cascade;验证:在删除前用该用户登录成功,在删除后,再使用该用户登录进行验证,如果失败即表示删除成功或用户已被lock。或者使用SQLselect username from dba_users where username=被删除用户名大写没有查询出记录即可。3.3 服务命名配置用Oracle Ne manager配置服务命名:1. 在$ORACL_HOME/bin目录下运行netmgr 启动Oracle Net manager.2. 在导航窗格,展开LocalService Naming.(服务命名)3. 在工具条里单击+。网络服务名称向导启动。4. 在网络服务名称域里输入名称(任何用户想设定的名称,一般设置为与目标数据库相同名称),然后单击Next.5. 选择客户端将要监听的协议(该协议必须已安装在客户端上)。单击Next.6. 在提供的域里为所选择的协议输入适当的协议参数,然后单击呢Next.7. 输入目的服务(主机名选择客户端的IP,端口号选择对方启动的监听端口号),然后单击Next.8. 输入对方数据库服务名,设置为对方数据库名.9. 单击Test,验证网络服务名称能否正常工作,然后单击Next.如果测试不成功: 确认目标数据库和监听者正在运行,然后单击Test. 单击Chang Login来改变连接的用户名称和密码,然后单击Test.10. 击Close关闭连接测试对话框。11. 单击Finish保存配置,并关闭服务名称向导。验证:使用该服务名进行连接进行测试,如果成功,则表示配置成功:SQLsqlplus username/passwdnet_service_nameSQLselect count(*) from tab;等操作如果成功,即表示配置成功。3.4 修改内存结构n 如果在创建数据库时,没有对内存进行设置,可在安装完成后,按需要对数据库的一些内存等参数进行修改: 修改方法: 可通过alter systemn set语句修改; 也可通过创建pfile转化为spfile修改. Alter system set 语句:alter system set 参数表达式l scope=spfile; Pfile转化为spfile:l SQLcreate spfile=”$ORACLE_BASE/oradata/ORACLE_SID/spfile/ORACLE_SID.ora” from pfile=” $ORACLE_BASE/oradata/ORACLE_SID /init ORACLE_SID.ora”n 需修改选项和修改内容为如下:#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验证:使用如下命令,查找相关内存配置是否满足配置要求:SQLshow parameters3.5 Oracle最大链接数两种修改办法1. 修改init ORACLE_SID.ora参数文件,但是必须带参数启动数据库才有效。修改$ORACLE_HOME/dbs/init ORACLE_SID.ora文件中的processes参数的值,然后带参数重新启动数据库即可(SQLstartup pfile=/$ORACLE_HOME/oradata/ ORACLE_SID/init ORACLE_SID.ora)。(修改的数值可以参考$ORACLE_HOME/dbs/init.ora模板文件的提示)2. 使用oracle 9i的新特性,使用spfile.Alter system set processes=数值 scope=spfile; 重启数据库即可. 如果不习惯使用spfile,可在安装后把$ORACLE_HOME/dbs/spfilen ORACLE_SID.ora删除即可.此时数据库将使用pfile,即原来的init ORACLE_SID.ora文件.验证:与“修改内存结构”的验证方法一样。3.6 导入导出数据 整个数据库导入导出:ln 导出: exp dbauser/dbapasswd ORACLE_SID file=exp_filename log=exp_logfile full=y 导入: imp dbauser/dbapasswd ORACLE_SID full=y ignore=yn file=exp_filename log=exp_logfile 按用户导入导出:l 导出:exp dbauser/dbapasswdn ORACLE_SID file=exp_filename log=exp_logfile owner=exp_username 导入:impn dbauser/dbapasswd ORACLE_SID file=exp_file_name log=exp_logfile fromuser=exp_user touser=imp_user其中方括号内的内容规定如下:dbauser:具有DBA权限的Oracle用户名dbapasswd:dbauser的用户密码sid:Oracle服务名exp_file_name:导出数据文件的文件名exp_logfile:导出日志exp_user:导出数据文件的用户名。Imp_user:准备要将数据导入的用户名。验证:导出验证:使用在本机进行导入和在bin模式下FTP到其他机器进行相关导入验证。导入验证:more log文件查询导入是否成功。3.7 Oracle联机在线日志文件管理3.7.1 查询联机在线日志文件信息SQL select * from v$log;SQLselect * from v$logfile;3.7.2 修改数据库联机在线日志文件如果没有在创建数据库时把redo日志文件大小设置成5M,和分为5个组,每组两个redo日志文件.则需要使用如下方法进行设置.一般默认安装后,的redo日志文件都为三组三个.n 则增加4组和5组,每组两个日志文件,且大小为5M,命名为redo04.log,redo14.log和redo05.log,redo15.log.n 使用日志切换,把当前活动日志切换到4组.则把1,2,3组drop掉.再用手工删除该对应的redo日志文件. 创建1,2,3组,文件命名分别为:n redo01.log,redo11.log和redo02.log,redo12.log和redo03.log,redo13log.大小都为5M. 创建日志组,且一起创建日志文件,使用如下命令:SQLalter database add logfile group X ($ORACLE_BASE/oradata/ ORACLE_SID/redo0X.log, $ORACLE_BASE/oradata/ORACLE_SID/redo1X.log) size 5M; 查看当前日志状态和日志切换使用如下命令:SQLselect * from v$log; SQL alter system switch logfile; 删除旧的日志文件使用如下命令:SQL alter database drop logfile group X;手动删除对应的日志文件使用系统删除命令.(如果文件已经损坏,则可使用如下方法(保守方法: alter database clear logfile group X;):alter database clear unarchived logfile group X;清除,再drop.不进行归档,此时需要进行做一个备份,否则数据库将不能使用其进行恢复.)验证:使用SQL命令查询修改结果是否符合修改要求。SQLselect name from v$log;3.8 Oracle归档日志管理3.8.1 检查归档配置%sqlplus /nologSQLarchive log list信息如下(有可能以中文显示):SQL archive log listDatabase log mode Archive Mode /说明是否为归档模式,此处是归档模式Automatic archival Enabled /自动归档进程是否启动,此处是自动启动Archive destination /usr5/archive /说明第一归档目标,此处是/usr5/archiveOldest online log sequence 51402 /说明就的联机在线日志序号Next log sequence to archive 51404Current log sequence 51404SQL若要查看是否设置了其他归档目标,则使用如下命令检查:SQLshow parameters log_archive_dest3.8.2 设置归档模式和取消归档模式数据库运行模式分为归档和不归档模式.一般在确认有足够的空间存放归档日志文件才使用归档模式设置数据库(推荐:至少有用户数据的4倍以上的空闲空间,才使用归档模式) 设置归档模式 归档模式的修改,可使用oracle 9i的新特性,使用spfile, 通过alter system set语句完成.nn 配置归档模式: 配置好归档属性u 把数据库放入归档模式u 检查归档是否满足要求u1) 配置好归档属性a) 设置归档目标% su oracle,或以oracle用户登陆更改ORACLE_SID环境变量为要增加用户的数据库名SQL connect /as sysdba假如需要放入归档文件的路径为$ORACLE_ARCH_1和$ORACLE_ARCH_2,则进行如下设置归档目标:l SQLalter system set log_archive_dest_1=”Location=/$ORACLE_ARCH_1” scope=spfile; SQLlalter system set log_archive_dest_2=”Location=/$ORACLE_ARCH_2” scope=spfile;b) 设置归档进程启动oracle自动归档的进程,进行如下设置: SQLlalter system set log_archive_start=ture scope=spfile;c) 设置归档文件名称设置好归档文件的名称,一般需要带上SN号,可配置如下: SQLlalter system set log_archive_format=”SID_T%TS%S.ORA”2) 把数据库放入归档模式 正常关闭数据库shutdownll 放入归档模式SQLstartup mountSQLalter database archivelogl 打开数据库SQLalter database open;3) 检查归档属性SQLarchive log listl 查看归档目标是否设置正确,归档进程是否已经启动.数据库是否已经处于归档状态验证:使用检查归档属性的方法进行验证,从报告中即可得出是否配置成功。 取消归档模式先检查数据库是否已经放入归档模式运行,如果已经是归档模式运行,则按照如下方法取消归档模式: 取消归档模式n% su oracle,或以oracle用户登陆更改ORACLE_SID环境变量为要增加用户的数据库名SQL connect /as sysdba 检查是否处于归档模式lSQLarchive log listl 正常关闭数据库SQLshutdown 把数据库放入非归档模式lSQLstart mountSQ.Lalter database noarchivelog 打开数据库lSQLalter database open; 停止归档进程lSQLarchive log stop 取消归档进程自动启动lSQLalter system set log_archive_start=falseScope=spfile;验证:使用检查归档属性的方法进行验证,从报告中即可得出是否配置成功。3.9 Oracle存储信息3.9.1 查询存储信息SQLselect * from dba_tablespaces; /检查逻辑空间信息SQLselect * from dba_data_files; /检查逻辑空间与物理空间的信息SQLselect * from v$datafile; /检查物理存储文件的信息3.9.2 创建表空间以oracle用户登录,执行如下命令创建表空间和该表空间的数据文件%sqlplus /nolog%connect /as sysdbaSQLcreate tablespace tablespace_namedatafile /$ORACLE_BASE/oradata/ORACLE_SID/datafile_name01.dbfsize 1000Mautoextend on next 1000M maxsize unlimitedminimum extent 25Mdefault storage ( initial 50Mnext 50Mminextents 1maxextents unlimitedpctincrease 0);-黑体部分为可修改部分,其中,最好只修改tablespace_name,和数据文件路径和数据文件名称(最好与其他数据文件放在一起),除了名称与路径,最好不要做其他修改。给表空间添加数据文件:SQL alter tablespace tablespace_name adddatafile /$ORACLE_BASE/oradata/ORACLE_SID/datafile_name01.dbfsize 1000M;验证:使用SQL命令查询是否已经创建成功。SQLselect tablespace_name from v$tablespaces;3.10 修改某用户缺省和临时表空间如果在创建用户时,没有指定缺省和临时表空间,则默认都为SYSTEM表空间。n 修改用户缺省表空间:SQLalter user system default tabspace USERS;n 修改用户临时表空间:SQLalter user system temporary tabspace TEMP;验证:使用SQLselect * from dba_users where username=被修改用户名大写;查看即可。3.11 Oracle数据库的汉字显示问题n 注意在oracle的使用过程中,如果字符集出现错误.版本在oracle7以下的,则允许用以下方法修改;如果是oracle8版本,则需要使用其他的命令修改,且原来设置的语言必须为美国英语;对于9版本.则必须重新创建数据库.在创建数据库的过程中设置正确的字符集.n Oracle7版本字符集修改办法在SQL*Plus中insert进的都是中文的,为什么一存入服务器后,再select出的就是? ? ?了? 错误现象: 1、 有的时候,服务器数据先导出,重装服务器,再导入数据,结果,发生数据查询是出现的是? ? ?。2、 有时,服务器设置就有问题,字符集设成单字节了。 错误原因: 一般这种问题产生的原因是因为字符集设置不对造成的。 解决方法: 1、检查服务器上Oracle数据库的字符集,检查的方法如下:SQL connect /as sysdba连接成功.SQL desc props$ 列名 可空值否 类型- - -NAME NOT NULL VARCHAR2(30)VALUE$ VARCHAR2(2000)COMMENT$ VARCHAR2(2000)SQL col value$ format a40SQL select name,value$ from props$;NAME VALUE$- -DICT.BASE 2NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_CURRENCY $NLS_ISO_CURRENCY AMERICANLS_NUMERIC_CHARACTERS .,NLS_DATE_FORMAT DD-MON-YYNLS_DATE_LANGUAGE AMERICANNLS_CHARACTERSET ZHS16GBKNLS_SORT BINARYNLS_CALENDAR GREGORIANNLS_RDBMS_VERSION .0GLOBAL_DB_NAME ORACLE.WORLDEXPORT_VIEWS_VERSION 3查询出记录.NLS_CHARACTERSET这个参数应该是ZHS16GBK,如不是,需要修改成此值,修改的方法如下,SQL*Plus中修改方法:SQL update props$ set value$=新字符集 where name=NLS_CHARACTERSET;操作系统中修改方法:connect /as sysdbaalter database SID character set ZHS16GBK;alter database SID national character set ZHS16GBK;注意修改数据库字符集后需要重启数据库。2、检查操作系统WINDOWS中Oracle汉字显示的字符集,检查方法如下:运行regedit,定位到:HKEY_LOCAL_MACHINESOFTWAREORACLE找到以下字符串:NLS_LANG检查是否以下内容,如不是,改之,修改方法如下:SIMPLIFIED CHINESE_CHINA.ZHS16GBK注意修改数据库字符集后需要重启数据库。3.12 oracle卸载方法3.12.1 UNIXa) 使用安装向导工具卸载b) 删除安装目录c) 删除/var/opt/目录下的oracle目录d) 卸载完成3.12.2 WINe) 使用安装向导工具卸载f) 用Control Panel(控制面板)中的Services应用程序停止所有ORACLE服务。g) 运行regedit,选择HKEY_LOCAL_MACHINESOFTWAREORACLE,按del键删除这个入口。h) 选择HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices,滚动这个列表,并删除所有ORACLE入口i) 从桌面上、STARTUP组中删除所有有关ORACLE的组和图标j) 删除与ORACLE有关的文件,选择ORACLE所在的缺省目录c:orant,删除这个入口目录及所有子目录,k) 并从WINDOWS NT目录(一般为c:winnt)下删除以下文件 ORACLE.INI ORADIM80.INIl) WIN.INI文件中若有ORACLE的标记段,删除该段4 常见开发操作4.1 常见表字段名操作4.1.1 查看表字段SQLdesc 表名如:SQL show userUSER is dbuserSQL desc dbuser2.xtbmName Null? Type- - -XTBM NOT NULL VARCHAR2(20)XTXX VARCHAR2(50)THETYPE VARCHAR2(10)DESCRIPTION VARCHAR2(200)REMARK VARCHAR2(100)SQL4.1.2 增加表字段例:SQLalter table ne_pcf add (adminstate integer,alarmstatus integer);(此操作不会修改原有字段的数据,新添加字段数据为空)4.1.3 删除表字段例:SQL alter table table_name drop (system_title, net_title,obj_id,ne_dn);(此操作不会影响其他字段的数据,直接删除所列字段名及所有数据)4.1.4 修改表字段类型例:SQL alter table ne_aaa modify (sw_version varchar2(255);注意: 修改字段类型为不同的数据类型,如从char变到int,则需要该字段的所有数据为空。ll 同类类型修改,如从char(10)变为char(20),char(30) 到varchar2(30)等变化,不会影响已有数据。4.1.5 修改表字段名可行的办法:create table 表名(字段名,字段名,字段名.) select 字段名,字段名,字段名. From 表名使用上述语句创建需要的新表,检查符合要求,数据无丢失后,drop掉原来的表,再把新表改名为原来的表名即可。相关操作语句本章查找。 4.2 表操作4.2.1 查询表信息l 查询当前用户所拥有的表名、表所使用的表空间、表创建时间、表大小SQLselect s.segment_name,s.tablespace_name,o.created,s.bytes/1024/1024 as table_size_Mfrom user_segments s,user_objects owhere o.object_type = TABLEand s.segment_type = TABLEand o.object_name = s.segment_name;(查询当前用户的表的信息)4.2.2 创建表例:SQL create table t2 (en varchar(100),intr int) tablespace dbmonitor;(创建表的时候请指定表空间)4.2.3 删除表数据(重要)删除表数据的方法: 删除表所有数据的最快速方法lSQL truncate table 表名;(此方法系统不记录日志,一但删除,将不可恢复)l 删除满足指定条件的大表的数据对于大数据量的表,比如告警表,采集原始表,最好编写一procedure进行删除,小批量删除提交后再进行小批量删除提交,直到满足要求。Procedure范例如下(在SQL提示符号下,先运行SQLset serveroutput on,以便存储过程输出处理结果):v_table_name:被删除的表名v_once_delete_row_num:一次删除的行数v_condition:删除表的where 条件create or replace procedure delete_table(v_table_name varchar2,v_once_delete_row_num varchar2,v_condition varchar2)aspragma autonomous_transaction;v_delete number:=0;begin while 1=1 loopEXECUTE IMMEDIATE delete from |v_table_name| where |v_condition| and rownum set timing onSQL exec delete_table(alarminfo_bk,1000,alarmnumber = 0000191105786406);删除操作结束!一共删除了1条记录PL/SQL 过程已成功完成。已用时间: 00: 03: 26.41SQL删除时间虽然还是比较长,但可以保证部分大批量无控制删除时的出错和消耗UNDO等的性能消费。4.2.4 删除表SQLdrop table 表名;4.2.5 重命名表SQLrename 表1 to 表2;4.2.6 备份表l 备份成其他名称的表SQLcreate table 表名1 as select * from 表名2; 备份成数据文件l%exp 表所属用户名/密码服务名 file=定义文件名称.dat log=定义日志文件名称 tables=表名 备份表结构l没办法,要么:1) 使用如TOAD等工具进行导出备份。2) 使用exp 的方法导出数据,再使用imp的方式导入数据库,只是此时一定要在imp语句末尾加上 show =y,并且写入日志文件。这样才可以在日志文件中观察表结构(导出的表结构不能直接使用,需要整理)。如:%exp dbuser2/dbuser2userdb file=a.dat tables=ne_msc% imp dbuser2/dbuser2userdb file=a.dat log=a.log full=y show=y4.3 索引操作4.3.1 查询索引信息l 查询某表所有索引及每个索引使用的字段SQLselect index_name,column_name from user_ind_columnswhere table_name = 表名大写 order by index_name;l 查询某索引所使用的表空间、索引大小通过从上面查询到的索引名称,可继续查询索引详细信息SQLselect segment_name,tablespace_name,bytes/1024/1024 as index_size_M from user_segments where segment_type = INDEXand segment_name = 索引名称大写;(查询当前用户的表的索引信息)4.3.2 创建索引(注意:1) 虽然主键仅是一种唯一、非空的约束而已,但创建(删除)方法与创建一般约束有所不同。2) 只要索引名称不重复,索引字段完全一样,就允许创建无穷多个索引) 创建主键l例:SQLalter table tabname_router add primary key(ne_id,port_id,start_time,stop_time); 创建唯一索引l例:SQLcreate unique index inx_o_tabname_vlr_temp on o_tabname_vlr_temp(ne_id, start_time, stop_time) tablespace rperfdbs; 创建非唯一索引l例:create unique index idx_bb on t2(a is not null,b);(可在创建的语句中指定索引使用某个表空间)4.3.3 删除索引 删除主键l例:SQLalter table tabname_rout

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论