oracle实验总结报告,Oracle运维总结报告.docx

253b171540df25e1b84436cbe50dfc72.gifOracle运维总结报告.docx

Oracle 数据库运维总结报告起草 罗桃阳校核审查2014 年 1 月目录1.说明 .31.1 报告说明 31.2 系统概述 32 当前配置情况说明 .32.1 主机配置 32.2 数据库配置 33 操作系统可用性 53.1 文件系统使用情况 .53.2 操作系统性能分析 .53.2.1 CPU 使用趋势状况 53.2.2 内存使用状况 63.2.3 磁盘 IO 使用情况 .74 数据库可用性 104.1 活动会话数 .104.2 日志切换时间间隔 .104.3 表空间使用情况 .104.4 数据库文件读写状况 .114.5 数据库备份状况 .124.6 数据库恢复 .125 数据库性能分析 135.1 缓存命中率 .135.2 等待事件 TOP5145.3 执行时间最长 SQL 145.4 花费 CPU 最多 SQL .156 数据库改善建议 217 变更记录 218 故障及经验总结 218.1 故障一 .211.说明1.1 报告说明此报告作为时间 2013/11/012014/01/17 yjdb02 oracle 数据库运维总结报告,旨在监视期间 Oracle 数据库运行状况报告和可能产生的问题隐患做一次完整分析,并对未来数据库提出管理、规划、维护、优化建议和意见。以保证生产数据库的高可用性。1.2 系统概述yjdb02 oracle 数据库(版本号为 10.2.0.5.0 - 64bit) ,该数据库承载着近 70 套应用系统的数据。运行在一台 IBM POWER 740 服务器上,操作系统版本为AIX 6100-04-04-1014。该数据库自 2013 年 11 月 1 日上线以来,已运行 70 多天,在 2013 年 11 月 25 日发生过一次因磁盘空间满导致数据库挂起故障。2 当前配置情况说明2.1 主机配置主机名yj-zhdb主要配置 OS 版本 运行软件或服务及版本CPU POWER 7 3550 MHzMEM32G磁盘4*600GIP 10.44.98.10AIX 6100-04-04-1014 Oracle 10g 10.2.0.5.0 - 64bit2.2 数据库配置实例名 yjdb02服务名 yjdb02SGA Total System Global Area 1.6777E10 bytesFixed Size 2125712 bytesVariable Size 2852126832 bytesDatabase Buffers 1.3875E10 bytesRedo Buffers 48205824 bytes控制文件 /dev/rCONTROL01,/dev/rCONTROL02, /dev/rCONTROL03Redolog GROUP MEMBER TYPE SIZE - - 1 /dev/rREDO01 ONLINE 50M2 /dev/rREDO02 ONLINE 50M3 /dev/rREDO03 ONLINE 50M数据文件 FILE_ID FILE_NAME SIZE 4 /dev/rUSERS01 1488.75M3 /dev/rSYSAUX01 440M2 /dev/rUNDOTBS01 335M1 /dev/rSYSTEM01 560M5 /dev/rYTIM_DATA 400M6 /dev/rSOPE 4096M7 /dev/rDNYPM_DATA 20M8 /dev/rXMBRS_DATA 200M9 /dev/rHCGL_DATA 500M10 /dev/rCGNSERVICE_DATA 1024M11 /dev/rYJXXZC_DATA 500M12 /dev/rELOG_DATA 200M13 /dev/rSBFX_DATA 200M14 /dev/rYOPPG_DATA 200M15 /dev/rSOL_DATA 200M16 /dev/rYCAR_DATA 200M17 /dev/rYJTEM_DATA 500M18 /dev/rYJPTMS_DATA 200M19 /dev/rREMS_DATA 200M20 /dev/rSTAL_DATA 200M21 /dev/rQSQ_DATA 200M22 /dev/rSHR_DATA 100M23 /dev/rCCM_DATA 32M24 /dev/rYJCMS_DATA 50M25 /dev/rFPSP_DATA 123M26 /dev/rIPMS_DATA 200M27 /dev/rQSHR_DATA 100M28 /dev/rSRMS_DATA 50M29 /dev/rMES_DATA 50M30 /dev/rFBPS_DATA 50M31 /dev/rPDS_DATA 50M32 /dev/rTCF_DATA 50M归档模式 Database log mode Archive ModeAutomatic archival EnabledArchive destination /oracle/archOldest online log sequence 6100Next log sequence to archive 6102Current log sequence 61023 操作系统可用性3.1 文件系统使用情况Filesystem GB blocks Free Used Iused Iused Mounted on/dev/hd4 3.00 2.75 9 13114 3 dev/hd2 6.00 3.28 46 48495 6 /usr/dev/hd9var 2.00 1.72 14 8841 3 /var/dev/hd3 6.00 5.99 1 66 1 /tmp/dev/hd1 3.00 2.99 1 31 1 /home/dev/hd11admin 1.00 1.00 1 5 1 /admin/proc - - - - - /proc/dev/hd10opt 1.00 0.79 21 8786 5 /opt/dev/livedump 1.00 1.00 1 4 1 /var/adm/ras/livedump/dev/oraclelv 45.00 30.32 33 24758 1 /oracle注文件系统正常,剩余空间充足。3.2 操作系统性能分析3.2.1 CPU 使用趋势状况CPU 整体空闲情况系统程序 CPU 使用率用户程序 CPU 使用率注CPU 负载在 2014-01-18 日至 2014-01-20 日间负载很低,运行状态平稳。3.2.2 内存使用状况物理内存使用情况Swap 使用情况注周末期间内存使用率持续下降,工作时间开始时,swap 波动较大。3.2.3 磁盘 IO 使用情况Hdisk0 磁盘繁忙程度Hdisk0 每秒读取次数Hdisk0 每秒写入次数Hdisk1 磁盘繁忙程度Hdisk1 每秒读取次数Hdisk1 每秒写入次数Hdisk2 磁盘繁忙程度Hdisk2 每秒读取次数Hdisk2 每秒写入次数Hdisk3 磁盘繁忙程度Hdisk3 每秒读取次数Hdisk3 每秒写入次数注hdisk0,hdisk1 同属 rootvg;hdisk2 ,hdisk3 同属 datavg。Datavg 磁盘 io 高于 rootvg,每个vg 中的每个 hdisk IO 基本平衡。 Hdisk2 读取量比其他磁盘大,建议调整。4 数据库可用性4.1 活动会话数19482014/1/192051215422571002014/1/20203306409512615718821924102711301233133614391542164517481851195420572200230300610921231541852162472783012040200400活 动会 话数活 动 会 话 数 ( 每 分 钟 )注根据统计 yjdb02 设置 Session3305,processes3000 ,实际每天使用不到到 300。根据统计信息显示 Oracle Database 设置的 Session 数量满足现有需要。4.2 日志切换时间间隔0262014/1/19226526726926112614261626182621262202221122150262014/1/20226526626826112613261626182621002201220222112226026326526626905020004000间 隔 (s)日 志 切 换 时 间 间 隔 (s )注根据统计结果,日志切换时间间隔集中在 3060 分钟之间。但数据库繁忙时,切换时间小于10s。此处有待优化,建议增加 Redo log size,保证正常情况下维持日志切换在 10-20 mins 之间。4.3 表空间使用情况表空间名 总大小M 空闲空间M 使用率SYSTEM 560 65.75 4.02YTIM_DATA 400 162.69 0.72SOPE 4096 2282.56 5.53FBPS_DATA 50 46.31 0.01YCAR_DATA 200 199.94 0IPMS_DATA 200 147.69 0.16QSHR_DATA 100 99.44 0USERS 1490 0.56 13.22TCF_DATA 50 49.94 0XMBRS_DATA 200 197.88 0.01CGNSERVICE_DATA 1024 799.25 0.69ELOG_DATA 200 178.44 0.07YOPPG_DATA 200 197.19 0.01QSQ_DATA 200 199.94 0SRMS_DATA 50 47.13 0.01PDS_DATA 50 49.94 0HCGL_DATA 500 499.88 0YJTEM_DATA 500 139.69 1.1CCM_DATA 32 25.25 0.02SBFX_DATA 200 199.94 0SOL_DATA 200 199.94 0REMS_DATA 200 199.94 0SYSAUX 440 22.19 20.4DNYPM_DATA 20 12.31 0.02STAL_DATA 200 198.88 0SHR_DATA 100 96.44 0.01UNDOTBS1 335 200.81 13.1YJXXZC_DATA 500 499.88 0YJPTMS_DATA 200 199.94 0YJCMS_DATA 50 49.88 0FPSP_DATA 123 1.44 0.37MES_DATA 50 47.19 0.01TEMP 361 0 35.25注如果表空间对应的文件开启自动扩展,则使用率按最大扩展空间计算。总结表空间使用空间充足,但 USER 表空间数据过于集中,建议迁移部分数据至其他表空间或将 USER 表空间下的文件分布在不同磁盘,以分散 IO。4.4 数据库文件读写状况表空间 文件名 物理读 物理读块数 物理写物理写块数读时间0.01s写时间0.01sIO 总数USERS /dev/rUSERS01 17528443 31176774 714463 2810376 927020 5674844 18242906CGNSERVICE_DATA /dev/rCGNSERVICE_DATA 1170410 1677393 1056903 1475895 522512 12702006 2227313UNDOTBS1 /dev/rUNDOTBS01 12574 369532 1621871 5992079 86943 30998834 1634445SYSAUX /dev/rSYSAUX01 35987 736240 597318 834287 123378 7906867 633305SYSTEM /dev/rSYSTEM01 44876 947486 265928 345113 147002 2242240 310804FPSP_DATA /dev/rFPSP_DATA 183594 355611 76119 121362 59274 280443 259713IPMS_DATA /dev/rIPMS_DATA 123824 200764 36393 43779 31843 173490 160217SOPE /dev/rSOPE 78703 3290521 6755 6869 567005 77035 85458YJTEM_DATA /dev/rYJTEM_DATA 37249 709250 11311 11726 77297 88574 48560YTIM_DATA /dev/rYTIM_DATA 31493 475467 6111 6120 73837 76601 37604SRMS_DATA /dev/rSRMS_DATA 6252 11699 8265 8784 12849 74223 14517YOPPG_DATA /dev/rYOPPG_DATA 6342 11894 7891 7940 7254 79859 14233ELOG_DATA /dev/rELOG_DATA 7053 46905 6150 6163 28476 77171 13203DNYPM_DATA /dev/rDNYPM_DATA 6573 21148 6072 6080 13461 76002 12645FBPS_DATA /dev/rFBPS_DATA 6301 13533 6209 6223 16428 70585 12510CCM_DATA /dev/rCCM_DATA 6382 18920 6056 6056 17478 75526 12438MES_DATA /dev/rMES_DATA 6242 11705 6152 6175 33146 70672 12394XMBRS_DATA /dev/rXMBRS_DATA 6216 10871 6065 6066 16669 76198 12281SHR_DATA /dev/rSHR_DATA 6203 12470 6048 6048 10343 75330 12251STAL_DATA /dev/rSTAL_DATA 6143 8900 6049 6049 10722 75406 12192YJXXZC_DATA /dev/rYJXXZC_DATA 6100 7080 6061 6061 9679 75640 12161HCGL_DATA /dev/rHCGL_DATA 6099 7079 6050 6050 11470 75666 12149YJCMS_DATA /dev/rYJCMS_DATA 6096 7076 6048 6048 9777 75298 12144QSHR_DATA /dev/rQSHR_DATA 6095 7075 6048 6048 24199 70366 12143PDS_DATA /dev/rPDS_DATA 6081 6179 6048 6048 8846 70172 12129QSQ_DATA /dev/rQSQ_DATA 6081 6179 6048 6048 9018 75360 12129REMS_DATA /dev/rREMS_DATA 6081 6179 6048 6048 9460 75398 12129YJPTMS_DATA /dev/rYJPTMS_DATA 6081 6179 6048 6048 11645 75417 12129TCF_DATA /dev/rTCF_DATA 6081 6179 6048 6048 13689 70156 12129SOL_DATA /dev/rSOL_DATA 6081 6179 6048 6048 13636 75476 12129SBFX_DATA /dev/rSBFX_DATA 6081 6179 6048 6048 7608 75521 12129YCAR_DATA /dev/rYCAR_DATA 6081 6179 6048 6048 6782 75456 12129注Datafile 的读写总体状况良好,从读写前 10 位读写状况来看, USER 表空间对应的数据文件读写过于频繁,建议对 USER 表空间内容及文件做分散处理。4.5 数据库备份状况固定时间将 DB 使用 RMAN 备份出来,然后备份到异地 TAPE 里。情况良好。4.6 数据库恢复无恢复操作。建议定期演练恢复操作以保证备份介质可用。5 数据库性能分析5.1 缓存命中率14.01.14 547 - 21.01.14 1247一周 数据library cache 命中率db buffe 命中率Instance Efficiency Percentages Target 100Buffer Nowait 100.00 Redo NoWait 99.98Buffer Hit 100.16 In-memory Sort 100.00Library Hit 94.82 Soft Parse 95.26cute to Parse 5.89 Latch Hit 99.99Parse CPU to Parse Elapsd 5.82 Non-Parse CPU 99.15注DB buffer 和 library buffer 命中率一致处于 100状态,其它 SGA 各项命中指标也处于很高的水平。说明 oracle 运行内存充足,无需调整。5.2 等待事件 TOP5Top 5 Timed EventsEvent Waits Times Avg Waitms Total Call Time Wait ClassXDB SGA initialization 64,761 316,043 4,880 161.8 Otherenq FU - contention 10,800 31,623 2,928 16.2 OtherCPU time 1,976 1.0 control file parallel write 60,330 1,242 21 .6 System I/Ocontrol file sequential read 1,803,354 390 0 .2 System I/O注等待事件中,耗费时间最长事件类别为其它事件,原因暂时未知。5.3 执行时间最长 SQLElapsed Time sCPU Time scutionsElap per c s Total DB TimeSQL Id SQL Module SQL Text190,413 1 3 63470.95 97.46 4c1xvq9ufwcjc PL/SQL Developer select count* from user u,.125,816 2 1 125816.17 64.40 05s9358mm6vrr begin dbms_feature_usage_inter.125,815 1 1 125814.70 64.40 685jucmq3q7nd BEGIN DBMS_FEATURE_XDBfeatur.125,815 1 0 64.40 afdvc8zfrk70z select dbms_xdb.getHTTPPort fr.96,956 1 2 48478.05 49.63 c8khjbn635s3c plsqldev. select s.synonym_name object_n.93,459 1 1 93459.15 47.84 f5yun5dynkskv plsqldev. select s.synonym_name as obje.797 0 88,319 0.01 0.41 2210gauc646wj sqlplusYJ-ZHDB TNS V1-V3select free_space, total, use_.650 52 16,065 0.04 0.33 4jns5anwvyu2x w3wp. Select UPPERT1.RESOURCE_CODE.297 12 46 6.45 0.15 2trhraw95gwky DECLARE job BINARY_INTEGER .243 77 46 5.29 0.12 1gcyfxnwgfsfr INSERT /* BYPASS_RECURSIVE_CH.5.4 花费 CPU 最多 SQLCPU Time sElapsed Time scutionsCPU per c Total Total DB SQL Id SQL Module SQL Texts Time77 243 46 1.68 3.92 0.12 1gcyfxnwgfsfr INSERT /* BYPASS_RECURSIVE_CH.52 650 16,065 0.00 2.62 0.33 4jns5anwvyu2x w3wp. Select UPPERT1.RESOURCE_CODE.29 63 46 0.62 1.45 0.03 bunssq950snhf insert into wrh_sga_target_ad.21 61 1 20.74 1.05 0.03 b6usrg82hwsa3 DBMS_SCHEDULERcall dbms_stats.gather_databas.20 55 97 0.21 1.01 0.03 6p68r106pskrm w3wp. select xcent, zerenid, SA_ID, .19 43 41 0.47 0.98 0.02 4wnp7wh5mm2gkw3wp. SELECT 0 end_snap WHERE end_snap.dbid dbid and end_snap.instance_number instance_number and end_snap.snap_id end_snap endsn LEFT OUTER JOIN SELECT beg_snap.* FROM SELECT t1.* FROM WRH_SYSTEM_EVENT t1, WRM_SNAPSHOT s1 WHERE t1.dbid s1.dbid AND t1.instance_number s1.instance_number AND t1.snap_id s1.snap_id AND s1.bl_moved 0 UNION ALL SELECT t2.* FROM WRH_SYSTEM_EVENT_BL t2, WRM_SNAPSHOT s2 WHERE t2.dbid s2.dbid AND t2.instance_number s2.instance_number AND t2.snap_id s2.snap_id AND s2.bl_moved 0 a WHERE a.dbid dbid and a.instance_number instance_number and a.snap_id beg_snap and a.snap_id 0 and evtname.dbid dbid sd_xe_ash_nm, XKEHECLMAP xc WHERE sd_xe_ash_nm.wait_class_id xc.class_hash ORDER BY sd_xe_ash_nm.wait_class_id, sd_xe_ash_nm.tim_wait_diff DESC, sd_xe_ash_nm.event_id0h6b2sajwb74n select privilege, level from sysauth connect by granteeprior privilege and privilege0 start with grantee1 and privilege00k8522rmdzg4k select privilege from sysauth where grantee1 or grantee1 and privilege00ws7ahf1d78qa select SYS_CONTEXTUSERENV, SERVER_HOST, SYS_CONTEXTUSERENV, DB_UNIQUE_NAME, SYS_CONTEXTUSERENV, INSTANCE_NAME, SYS_CONTEXTUSERENV, SERVICE_NAME, INSTANCE_NUMBER, STARTUP_TIME, SYS_CONTEXTUSERENV, DB_DOMAIN from vinstance where INSTANCE_NAMESYS_CONTEXTUSERENV, INSTANCE_NAME10 xj8nynmpqtq SELECT dbin.db_name, dbin.instance_name, dbin.version, CASE WHEN s1.startup_time s2.startup_time THEN 0 ELSE 1 END as bounce, CASTs1.end_interval_time AS DATE as begin_time, CASTs2.end_interval_time AS DATE as end_time, ROUNDcast case when s2.end_interval_time s1.end_interval_time then s2.end_interval_time else s1.end_interval_time end as date - casts1.end_interval_time as date * 86400 as int_secs, CASE WHEN s1.status 0 THEN 1 ELSE 0 END as err_detect, round greatest extractday from s2._elapsed * 86400 extracthour from s2._elapsed * 3600 extractminute from s2._elapsed * 60 extractsecond from s2._elapsed, extractday from s1._elapsed * 86400 extracthour from s1._elapsed * 3600 extractminute from s1._elapsed * 60 extractsecond from s1._elapsed, 0 as max__secs FROM WRM_SNAPSHOT s1 , WRM_DATABASE_INSTANCE dbin , WRM_SNAPSHOT s2 WHERE s1.dbid dbid AND s2.dbid dbid AND s1.instance_number inst_num AND s2.instance_number inst_num AND s1.snap_id bid AND s2.snap_id eid AND dbin.dbid s1.dbid AND dbin.instance_number s1.instance_number AND dbin.startup_t ime s1.startup_time1gcyfxnwgfsfr INSERT /* BYPASS_RECURSIVE_CHECK */ INTO “EMS“.“EMSUSERINFO“ select u.STAFF_ID, NVLu.STAFF_NO, u.STAFF_NET_ID AS STAFF_NO, STAFF_NAME, STAFF_NAME_PY, STAFF_SHORT_PY, STAFF_STATUS, d.* from CGN.V_ALLSTAFF u, SELECT DEPT_ID, DEPT_NO, dept_NAME_Path, EMS.getdeptnamedept_NAME_Path, C AS CORPNAME, EMS.getdeptnamedept_NAME_Path, D AS DEPT_NAME, EMS.getdeptnamedept_NAME_Path, B AS BRANCH_NAME, EMS.getdeptnamedept_NAME_Path, S AS SECTION_NAME FROM CGN.DEPT WHERE DEPT_STATUS 1 d WHERE u.STAFF_DEPT_ID d.DEPT_ID1qnhhjmbnvwth select * from select rownum rn, a.* from select * from cba_tickets t where 11order by to_daterea_date, yyyy-mm-dd desc nulls last a where rn between 1 and 152210gauc646wj select free_space, total, use_rate from SELECT D.TABLESPACE_NAME, FREE_SPACE, SPACE “TOTAL“, ROUNDSPACE - NVLFREE_SPACE, 0 / DECODEROUNDD.MAXBYTES / 1024 / 1024, 2, 0, SPACE, ROUNDD.MAXBYTES / 1024 / 1024, 2 * 100, 2 “USE_RATE“ FROM SELECT TABLESPACE_NAME, SUMMAXBYTES MAXBYTES, ROUNDSUMBYTES / 1024 * 1024, 2 SPACE FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME D, SELECT TABLESPACE_NAME, ROUNDSUMBYTES / 1024 * 1024, 2 FREE_SPACE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME F WHERE D.TABLESPACE_NAME F.TABLESPACE_NAME UNION ALL SELECT D.TABLESPACE_NAME, FREE_SPACE, SPACE “total“, ROUNDSPACE - NVLFREE_SPACE, 0 / DECODEROUNDD.MAXBYTES / 1024 / 1024, 2, 0, SPACE, ROUNDD.MAXBYTES / 1024 / 1024, 2 * 100, 2 “USE_RATE“ FROM SELECT TABLESPACE_NAME, SUMMAXBYTES MAXBYTES, ROUNDSUMBYTES / 1024 * 1024, 2 SPACE FROM DBA_TEMP_FILES GROUP BY TABLESPACE_NAME D, SELECT TABLESPACE_NAME, ROUNDSUMBYTES_USED / 1024 * 1024, 2 USED_SPACE, ROUNDSUMBYTES_FREE / 1024 * 1024, 2 FREE_SPACE FROM VTEMP_SPACE_HEADER GROUP BY TABLESPACE_NAME F WHERE D.TABLESPACE_NAME F.TABLESPACE_NAME WHERE tablespace_name USERS298ppdduqr7wm SELECT status FROM sys.wri_adv_tasks WHERE id 12ggd5fqu7044t DECLARE job BINARY_INTEGER job; next_date DATE mydate; broken BOOLEAN FALSE; BEGIN dbms_refresh.refresh“CGN“.“STAFF“; mydate next_date; IF broken THEN b 1; ELSE b 0; END IF; END;2rycas7xwu179 select count0 from select * from cba_tickets t where 11order by to_daterea_date, yyyy-mm-dd desc nulls last2trhraw95gwky DECLARE job BINARY_INTEGER job; next_date DATE mydate; broken BOOLEAN FALSE; BEGIN dbms_refresh.refresh“EMS“.“EMSUSERINFO“; mydate next_date; IF broken THEN b 1; ELSE b 0; END IF; END;350f5yrnnmshs lock table sys.mon_mods in exclusive

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验一 SQL*PLUS练习 【实验目的】 (1) 了解Oracle的工作环境和基本使用方法。 (2) 练习标准SQL的数据操作,查询命令及其查询优化。 (3) 学会使用高级SQL命令,排序、分组、自连接查询等。 (4) 学会使用SQL*PLUS命令显示报表,存储到文件等。 【实验内容】 一、 准备使用SQL*PLUS 1. 进入SQL*PLUS 2. 退出SQL*PLUS 3. 显示表结构命令DESCRIBE SQL>DESCRIBE emp 使用DESCRIBE(缩写DESC)可以列出指定表的基本结构,包括各字段的字段名以及类型、长度、是否非空等信息。 4. 使用SQL*PLUS显示数据库中EMP表的内容 输入下面的查询语句: SQL>SELECT * FROM emp; 按下回车键执行查询 5. 执行命令文件 START或@命令将指定文件调入SQL缓冲区中,并执行文件内容。 SQL>@ 文件名(文件后缀缺省为.SQL)或 SQL>START 文件文件中每条SQL语句顺序装入缓冲区并执行。 二、 数据库命令——有关表、视图等的操作 1. 创建表employee 例1 定义一个人事信息管理系统中存放职工基本信息的一张表。可输入如下命令: SQL>CREATE TABLE employee (empno number(6) PRIMARY KEY, /* 职工编号 name varchar2(10) NOT NULL, /* 姓名 deptno number(2) DEFAULT 10, /* 部门号 salary number(7,2) CHECK(salarycreate table emp2 as select * from emp where 1=2; 在命令的where子句中给出1=2,表示条件不可能成立,因而只能复制表结构,而不能复制任何数据到新表中去。另外,还可以复制一个表的部分列定义或部分列定义及其数据。 三、 Oracle数据库数据查询 1、单表查询 2、多表查询 四、 SQL*PLUS常用命令 表1 常用报表格式化名命令 命令 定义 Btitle 为报表的每一页设置底端标题 Column 设置列的标题和格式 Compute 让SQL*PLUS计算各种值 Remark 将某些字标记为注释 Set linesize 设置报表的行宽字符数 Set newpage 设置报表各页之间的行数 Spool 使SQL*PLUS将输出写入文件中 Start 使SQL*PLUS执行一个sql文件 Ttitle 设置报表每页的头标题 Break 让SQL*PLUS进行分组操作 例3 建立一个批命令文件对查询到的数据以报表的形式输出并将其保存到指定的文件中。 处理方法:利用SQL*PLUS语言工具(也可以使用其他文本编辑器)建立批命令的.SQL文件。在“SQL>”提示符下,使用EDIT命令在”E:\”中建立SCGB.SQL文件。 SCGB.SQL文件中的命令组如下: SQL>EDIT E:\ SCGB.SQL SET echo off SET pagesize 30 SET linesize 75 TTITLE’2008年4月10号’CE’公司职员基本情况登记表’R’Page:’ FORMAT 99- >SQL.PNO SKIP 1 CE’===========================’ BTITLE COL 60 ’制标单位’ TAB 3 ‘人事部’ COLUMN empno heading ‘职工|编号’ COLUMN ename format a10 heading ‘姓 名’ COLUMN job heading ‘工 种’ COLUMN sal format $99,990 heading 工 资’ COLUMN comm Like sal heading ‘奖 金’ COLUMN deptno format 9999 heading ‘部门|编号’ COLUMN hiredate heading ‘参加工作时间’ SPOOL e:\sjbb /*在E盘中建立格式报表输出文件,默认属性为LST BREAK on deptno skip 1 COMPUTE sum of sal comm on deptno SELECT empno,ename,job,hiredate,sal,comm,deptno from emp ORDER BY deptno,sal; SPOOL off /*终止SPOOL功能,关闭其文件。注意,此命令不可省,否则将建立空文件。 五、 实验内容 1、以cs+学号为用户名创建用户,并授予用户创建数据对象的权限。 2、复制emp表,复制表名为emp_学号,然后将emp表中工资低于$2000 的职工插入到复制的表中。 3、对复制的emp表插入一行只包含有职工号,职工名,工资与部门号四个数据 项值的记录。 4、在复制的emp表中将雇员ALLEN提升为经理,工资增至$2500, 奖(佣 )金增加40%。 5、删除复制的emp表中工资低于500的记录行。 6、列出10号部门中既不是经理,也不是秘书的职工的所有信息。 7、查找出部门所在地是CHICAGO的部门的职工姓名、工资和工种。 8、统计各部门中各工种的人数、工资总和及奖金总和。 9、查找出工资比其所在部门平均工资高的职工姓名、工种与工资情况。 实验3 Oracle数据库开发环境下PL/SQL编程 【实验目的】 (1)掌握 PL/SQL 的基本使用方法。 (2)在SQL*PLUS环境下运行PL/SQL的简单程序。 (3)应用 PL/SQL 解决实际问题 【实验内容与步骤】 PL/SQL块中的可执行部分是由一系列语句组成的(包括对数据库进行操作的SQL语句,PL/SQL语言的各种流程控制语句等)。在块中对数据库查询,增、删、改等对数据的操作是由SQL命令完成的。在PL/SQL块中,可以使用SQL的数据查询命令,数据操纵命令和事务控制命令。可使用全部SQL函数。PL/SQL中的SQL语句,可使用SQL的比较操作等运算符。但不能使用数据定义语句。 在PL/SQL块中使用SELECT语句时注意几点: (1)SELECT语句必须含有INTO子句。 (2)INTO子句后的变量个数和位置及数据类型必须和SELECT命令后的字段名表相同。 (3)INTO子句后可以是简单类型变量或组合类型变量。 (4)SELECT语句中的WHERE条件可以包含PL/SQL块中定义的变量及表达式,但变量名不要同数据库表列名相同。 (5)在未使用显式游标的情况下,使用SELECT语句必须保证只有一条记录返回,否则会产生异常情况。 [例3-1] 问题:编写一个过程,求和运算。 SET SERVEROUTPUT ON; DECLARE a number:=1; BEGIN a:=a+5; DBMS_OUTPUT.PUT_LINE('和为:'||TO_CHAR(a)); END; / 【例3-2】:使用%TYPE声明变量,输出制定表中的相关信息。 DECLARE my_name student.sname%TYPE; BEGIN SELECT sname INTO my_name FROM student WHERE no=’01203001’; DBMS_OUTPUT.PUT_LINE(my_name); END; / 【例3-3】问题:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该员工工资增加10%。 declare v_sal emp.sal%type; begin select sal into v_sal from emp where ename=spName; if v_sal :NEW.sal THEN DBMS_OUTPUT.PUT_LINE('工资减少'); ELSIF :OLD.sal < :NEW.sal THEN DBMS_OUTPUT.PUT_LINE('工资增加'); ELSE DBMS_OUTPUT.PUT_LINE('工资未作任何变动'); END IF; DBMS_OUTPUT.PUT_LINE('更新前工资 :' || :OLD.sal); DBMS_OUTPUT.PUT_LINE('更新后工资 :' || :NEW.sal); END; / --执行UPDATE查看效果 UPDATE emp SET sal = 3000 WHERE empno = '7788'; 6、需要对在表上进行DML操作的用户进行安全检查,看是否具有合适的特权。 Create table foo(a number); Create trigger biud_foo Before insert or update or delete On foo Begin If user not in (‘DONNY’) then Raise_application_error(-20001, ‘You don’t have access to modify this table.’); End if; End; / 即使SYS,SYSTEM用户也不能修改foo表。 2、 利用PL/SQL编写程序实现下列触发器 1)、编写一个数据库触发器,当任何时候某个部门从dept表中删除时,该触发器将从emp表中删除该部门的所有雇员。(要求:emp表、dept表均为复制后的表) 2)、创建一个触发器,当客户下完订单后,自动统计该订单的所有图书的价格总额。 3)、创建一个触发器,禁止客户在非工作时间(早上8:00前,晚上17:00后)下订单。 五、实验心得
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值