Oracle9i实验指导
2017-04-28 18:53
204 查看
实验环境及说明
(1) 本指导手册是在以下实验环境下完成的:l Windows XP/NT/Server/Win7(32位Windows);
l Oracle 9.2(9.2.0.1.0),包括:
² Oracle企业管理器(Oracle Enterprise Manager—OEM,Windows)
² SQL Plus(DOS)、SQL Plus(Windows)、SQL
Plus WorkSheet(Windows)
² 数据库配置助手(Database Configuration Assistant--DBCA)
² 导入与导出工具(IMP / EXP,DOS),Oracle Net Manager(Net配置与测试工具)
² Oradim(Oracle服务的启停、创建、修改、删除工具,DOS)
² LsnrCtl(Listener监听器的启动、关闭、及查看监听状态,DOS)
² TnsPing(从客户端到Oracle监听服务的ping网络工具,DOS)
l 第三方工具:PL SQL Developer 10.0.5
(2) 手册中DOS环境下运行的Oracle工具在Unix环境下的用法相同,除了Unix命令与DOS命令不同;
(3) 本手册可适用于Oracle 8、9、10、11等版本,主要区别在于OEM工具;Oracle从10.0版本开始推荐采用Web版OEM;Oracle
8、9、10等提供了Windows版的OEM,Oracle
9、10、11等提供了Web版的OEM;另外,Oracle不同版本的安装目录有所不同;
(4) 示例中,OracleHome名--Ora92Home,SID名--Ora92LSH;实验时,请根据实验机相应名称进行替换;
(5) 开放机房的Windows系统具备还原功能,即Windows重启后,Oracle也被还原,故会丢失实验的操作结果,请同学们注意;但同时,也可放心大胆地进行实验;
1. 实验一 Oracle基础(验证型2学时)
1.0 实验目的与实验内容
Ø 实验目的(1) 学习并掌握Oracle服务与Oracle监听服务的启停方法;
(2) 学习并掌握Oracle Net的配置方法;
(3) 学习OEM的操作及相关概念:连接(登录)、断开连接,表(及约束)的新建和修改操作,记录的插入、删除、修改等操作;了解“显示SQL |
隐藏SQL”按钮的作用,了解表的存储参数,理解表与方案(即用户)、表空间之间的关系;
Ø 实验内容
(1) 配置Oracle Net,启动OracleService和Oracle Listener服务;
(2) 使用OEM以SYSDBA登录Oracle,创建表空间STU_TBS,创建用户STUADMIN,然后以STUADMIN用户名登录,创建表Student并录入几条记录数据,将以上操作的SQL语句复制到stu.sql文件中;
(3) 2人一组,相互配置连接到对方Oracle服务器的服务命名,并通过OEM工具连接到对方服务器;进一步明确Oracle服务器与Oracle客户端的概念。
1.1 启动、停止Oracle服务
(1)控制面板--启停Oracle服务和Listener监听服务
*Oracle服务:“控制面板à管理工具à服务àOracleService<SID>”,启动|停止**注:其中<SID>为本机Oracle的SID名,上例服务名如OracleServiceOra92LSH
*Oracle监听服务:“控制面板à管理工具à服务àOracle<OraHome>Listener”,启动|停止
**注:1>
Oracle<OraHome>Listener如OracleOra92HomeListener;2>
监听服务程序需要读取配置文件listener.ora中的参数,当参数有错误时,启动监听会失败,参见1.2节“配置监听”;3>
当修改listener.ora后,监听程序可能会停止运行,需重启。
(2)DOS命令下--启停Oracle服务及Listener监听服务
*启动DOS:“开始菜单à程序à附件à命令提示符”,或“开始菜单à运行àCMD”,出现DOS窗口,其提示符如:C:\Users\Administrator>CD命令可切换当前目录,如:
C:\Users\Administrator>CD \
C:\>
*启动Oracle服务
C:\Users\Administrator>oradim -startup –sid Ora92LSH
*停止Oracle服务
C:\Users\Administrator>oradim –shutdown –sid Ora92LSH
*注:OraDim(DOS/Unix命令行工具)还具有Oracle服务的创建、修改、删除等功能
*启动Listener监听服务
C:\Users\Administrator>lsnrctl start
-- 下面用tnsping工具检查Listener监听,看能否ping通
C:\Users\Administrator>tnsping ora92Lsh
*停止Listener监听服务
C:\Users\Administrator> lsnrctl stop
C:\Users\Administrator>tnsping ora92Lsh
*查看Listener监听服务状态
C:\Users\Administrator> lsnrctl status
*进入LsnrCtl程序(监听的控制器)
C:\Users\Administrator> lsnrctl
LSNRCTL>Help --
帮助
LSNRCTL>start --
启动监听
LSNRCTL>stop --
停止监听
LSNRCTL>status --
查看监听状态
LSNRCTL>exit --
退出程序
C:\Users\Administrator>
*注:LsnrCtl(DOS/Unix命令行工具)具有Oracle监听服务的启动、停止、查看状态等功能;
TnsPing(DOS/Unix命令行工具)可在客户机上检查到Oracle服务器的网络是否通(即网络的ping操作),并检查Listener监听服务是否启动。
1.2 配置Oracle Net
Oracle Net Manager为Oracle客户端工具。*启动Net程序:“开始菜单à程序àOracleàConfiguration and Migration ToolsàNet Manager”
*配置监听:“本地à监听程序àLISTENER”,“监听位置à地址2”,其3个参数如下:
协议:TCP/IP
主机:<本机名>
或 <本机IP地址>;本机名在“我的电脑à属性à计算机名”中查看
端口:1521 或
<其它端口>;1521为Oracle的默认端口
**注:修改Listener配置并保存后,Oracle监听服务会停止运行,需重启监听程序。
*添加服务命名:选中“本地à服务命名”,点击按钮“+”;注:可添加远程Oracle服务。
*修改服务命名:“本地à服务命名à<XXX>”,服务命名的4个参数如下:
服务名 | SID:填写Oracle服务的<服务名>或<SID>
协议:TCP/IP
主机名:填写Oracle服务器的<计算机名>
或 <IP地址>;远程服务命名最好填写IP
端口:填写Oracle服务器的<监听器端口>,默认端口:1521
**注:配置本地和远程Oracle服务命名的方法相同。
*删除服务命名:选中“本地à服务命名”,点击按钮“X”;
*保存配置:“文件à保存网络配置”,配置参数被保存到下列2个纯文本文件中:
LISTENER参数文件:<Oracle安装目录>\network\admin\listener.ora
服务命名参数文件:<Oracle安装目录>\network\admin\tnsnames.ora
**注:Oracle早期版本直接修改这2个文件进行配置,Oracle8以后不推荐这么做。
*测试服务命名:选择“本地à服务命名à<XXX>”,点击按钮“”;“连接测试”窗口按钮:
更改登录:用于测试的Oracle账号,默认账号/密码为“SCOTT/TIGER”,可更改;
测试:点击后开始测试,尝试用上述账号连接Oracle服务器。
**注:测试连接前,应该保证Oracle服务和Oracle监听服务等2个程序处于运行状态,并且账号和密码有效。
1.3 Oracle企业管理器(OEM)
Oracle客户端工具。Oracle 8i和9i为Windows界面,而Oracle10g~11g为Web界面。**注:在Oracle10.2客户端安装包中提供了Windows界面的OEM工具。
(1)启动OEM
*启动OEM:“开始菜单àOracleà Oracle Enterprise Manager Console”;
(2)添加数据库
*添加数据库:“导航器à网络à数据库<右>à将数据库添加到树”;添加Net中的服务命名
注:可添加多个Oracle数据库,包括本地和远程;建议先在Oracle Net中添加服务命名。
(3)登录数据库
*登录数据库(连接):“导航器à网络à数据库à<服务名><右>à连接”;连接身份说明如下:
Normal: 正常身份登录,非管理员模式;
SysOper:以数据库系统操作员身份登录,可进行Oracle服务器的起、停,数据库的装载、打开及数据库备份、恢复、日志归档等工作;
SysDBA: 以数据库系统管理员身份登录,可进行Oracle服务器的起、停,数据库的装载、打开,数据库的备份、恢复、日志归档,设置字符集,数据库的创建、销毁等工作。
**注:SysDBA、SysOper只能在Oracle服务器本机登录,不能登录远程Oracle服务器?
*SYS登录:在Oracle服务器本机上,不输人用户和密码,选择SYSDBA身份直接登录。
*断开连接:“导航器à网络à数据库à<服务名><右>à断开连接”
(4)创建表空间STU_TBS
*新建表空间:“导航器à网络à数据库à<服务名>à存储à表空间<右>à创建”,名称栏输入STU_TBS,点击“显示SQL”并将SQL脚本复制到stu.sql文件,再点击“创建”;
**请注意领会表空间的状态、类型、存储等参数的含义及作用。
*”显示SQL”按钮:显示该窗口操作的所有SQL语句脚本,可以复制出来,先全选(Ctrl+A),再复制(Ctrl+C),然后粘贴(Ctrl+V)到其它文件中;
(5)新建用户STUADMIN
*新建用户:“导航器à网络à数据库à<服务名>à安全性à用户<右>à创建”;
一般信息:填写名称(STUADMIN)、口令,选择默认表空间(STU_TBS)、临时表空间(TEMP)、状态(未锁定);
角色:选择角色CONNECT、RESOURCE,选入按钮,去选按钮;
系统:选择系统权限SELECT ANY DICTIONARY,该权限可查询所有字典表(系统信息);
显示SQL:将SQL文本复制复制到stu.sql文件,阅读并理解文本内容;
创建:点击“创建”按钮。
*修改用户:“导航器à网络à数据库à<服务名>à安全性à用户àSTUADMIN”
*请修改SYS、SYSTEM用户的密码,并尝试分别使用SYS、SYSTEM、SCOTT账号登陆
(6)创建学生表Student,并对其数据进行维护
*建表:OEM程序菜单“对象à创建”,创建窗口 “<服务名>à表(选中),à使用向导(去选),à创建”,创建表窗口操作如下:
一般信息:填写表名(Student),字段名、类型、长度、可空、默认值等;选择方案(STUADMIN)、表空间(STU_TBS)
约束:主键Primary key、唯一键Unique、外键Foreign key、Check约束等设置方法
*修改表:“导航器à网络à数据库à<服务名>à方案àSTUADMINà表à Student”
*编辑表记录:“导航器à网络à数据库à<服务名>à方案àSTUADMINà表àStudent<右>à查看/编辑目录”,进入“表编辑器”窗口
**注:方案(Scheme)名一般就是用户(User)名,表示该用户所拥有的表、视图、索引、同义词、序列、簇、触发器、过程、函数、包、包体、数据库链等所有数据库对象。
2. 实验二 SQL Plus基础知识(综合型 4学时)
2.0 实验目的与实验内容
Ø 实验目的与实验内容(1) 了解SQL Plus基本功能、相关概念;(参见2.1节)
(2) 学会SQL Plus(DOS)的启动(sqlplus)与退出(exit/quit)、连接(connect)与断开连接(disconnect)、显示登录用户名(show
user)、帮助(Help)等命令的使用;(参见2.2节)
(3) 学会编辑(行编辑命令:List、Change、Append、Input)与执行SQL语句;(参见2.2节)
(4) 学会事务的控制(隐式事务、自动提交事务);(参见2.2节)
(5) 学会使用SQL脚本文件、SPOOL假脱机及格式化导出表数据;(参见2.2节)
(6) 学会日期格式会话级设置,及insert日期值的方法;(参见2.2节)
(7) 学习SQL Plus(Windows)和SQL Plus Worksheet的使用,了解3种SQL
Plus程序间的异同;(参见2.3-2.4节)
2.1 SQL Plus功能与相关概念简介
SQL Plus为Oracle客户端程序,其功能与OEM相同,是Oracle的常用工具。有4个版本的程序:DOS下运行的SQLPlus,Windows下运行的SQL Plus和SQL
Plus Worksheet,以及Web下运行的iSQL Plus等。
(1) SQL Plus可以运行所有的SQL语句
包括DDL、DML、DCL等SQL语句,如:Create、Alter、Drop、Select、Insert、Delete、Update、Grant、Revoke、Commit、Rollback等。
可以执行PL/SQL块。
(2) SQL Plus命令(参见《附录2 SQL Plus常用命令》)
SQL Plus有一套自己的命令,以及SQL缓冲区、环境变量等概念。SQL Plus命令在客户端SQL
Plus中执行,而不是在Oracle服务器端运行。
(3) SQL缓冲区
SQL缓冲区用于存放当前待执行的SQL语句或PL/SQL块,而SQL
Plus命令不被保存;
可进行编辑(行编辑),如List、Append、Input、Change、Del、Edit、Get、Save等命令;
当前行:当前编辑的文本行;
可采用外部操作系统的文本编辑器,如Edit、Get、Save等命令。
(4) 环境变量(68个)
反映SQL Plus的执行环境与状态,使用Set命令可改变其当前值,Show命令可查看。
(5) 连接、断开Oracle连接—Connect、Disconnect命令
(6) Oracle数据库的启动、停止,归档、备份、恢复
Startup、Shutdown命令—启动、停止Oracle数据库;
Archive命令—归档模式的设置、查看,进行日志归档等操作;
Host命令—执行操作系统(DOS命令),使用DOS的Copy命令可对数据库进行备份与恢复
(7) 可执行SQL脚本文件—Start/@命令
SQL脚本文件可以包括SQL Plus命令和SQL语句。SQL脚本文件内的常用命令有:
Define、Accept命令—宏变量的定义、键盘输入;
Print命令—输出变量值;
(8) 调用存储过程
Variable命令—定义存储过程时的IN/OUT变量,也称为宿主变量/Bind变量;
Exec命令—调用存储过程;
Print命令—输出Out变量的值;
(9) 假脱机输出—SPOOL命令
可将执行的SQL语句及其执行结果输出到文本文件或打印机中;
(10) 执行DOS操作系统命令—Host命令
(11) 联机帮助—HELP命令
可查看所有SQL Plus命令的完整语法;
2.2 SQL Plus(DOS)
(1)启动、退出SQL Plus
下表为启动SQLPlus命令的例子,进入SQL Plus后,提示符为“SQL>”命令例子 | 说 明 |
C:\> sqlplus | 启动SQL Plus,提示输入用户名和密码 |
C:\> sqlplus scott | 启动SQL Plus,提示输入用户scott的密码 |
C:\> sqlplus scott/tiger | 启动SQL Plus,并以Scott账号和tiger密码连接本地数据库; |
C:\> sqlplus scott/tiger@ora92lsh | 启动SQL Plus,并以Scott账号连接到本地或远程ora92lsh数据库; |
C:\> sqlplus "/as sysdba" SQL>show user | 启动SQL Plus,以SYSDBA身份连接本地Oracle; 显示连接的用户名,此时为SYS。 |
C:\> sqlplus /nolog SQL>show user SQL>connect scott/tiger | 不连接而直接启动SQL Plus 此时,用户名为空,表示未连接 再以Scott用户连接本地Oracle数据库 |
C:\> sqlplus scott/tiger@ora92lsh @D:\abc | 以Scott账号连接ora92lsh数据库,进入SQL Plus后,立即运行D:\abc.sql脚本文件 |
SQL> EXIT | 退出SQL Plus |
SQL> QUIT | 退出SQL Plus |
(2)连接、断开连接
进入SQL Plus后,可以用Connect命令连接、Disconnect命令断开连接;命令例子 | 说 明 |
SQL>connect | 连接数据库,提示输入用户名和密码 |
SQL>connect scott | 连接数据库,提示输入用户scott的密码 |
SQL>connect scott/tiger | 以scott用户和密码tiger连接数据库 |
SQL>connect scott/tiger@ora92lsh | 以Scott账号连接到ora92lsh数据库 |
SQL>connect system/manager@ora92lsh as sysdba | 以SYSDBA身份连接ora92lsh数据库 |
SQL>connect /@ora92lsh as sysdba | 以SYSDBA身份连接本地ora92lsh数据库 |
SQL>connect / as sysdba | 以SYSDBA身份连接本地数据库 |
SQL> disconnect | 断开连接,此状态下,不能执行SQL语句 |
(3)联机帮助
帮助命令(HELP / ?)可以查询所有SQL Plus命令的语法格式,但必须在连接状态下使用;HELP例子 | 说 明 |
SQL> help connect SQL> ? connect | 查询connect命令的语法格式 (同上) |
SQL> help c | 查询以c开头的所有命令的语法格式 |
SQL> help sqlplus | 查询启动SQL Plus命令的语法格式 |
(4)执行SQL语句
执行SQL语句之前,应先连接Oracle;注:SQL语句必须以“;”结束,而命令不需要;命令与SQL语句例子 | 说 明 |
SQL> select * from scott.emp; SQL> LIST SQL> RUN SQL> / | 查询用户SCOTT的表EMP(职员);注:SQL语句会被存入SQL缓冲区; 显示当前SQL语句,即显示SQL缓冲区内容; 显示并执行当前SQL语句 执行当前SQL语句 |
SQL> desc scott.emp | 查询表scott.emp的结构信息 |
SQL> select * 2 from scott.emp; SQL> L2 SQL> I where deptno=20 SQL> L SQL> R SQL> A order by ename SQL> L SQL> R SQL> L2 SQL> C/emp/dept/ SQL> L SQL> Del 3 SQL> L | 案例:显示和编辑SQL缓冲区 查询用户SCOTT的表EMP,注:语句可分多行(以;结束),此时从第2行开始显示行号; List 2命令的缩写,显示SQL缓冲区第2行,并设置为当前行(*),此时可编辑该行 Input命令,在当前行后插入一新行:’where deptno=20’ List的缩写,显示SQL语句每行行号及内容 Run的缩写 Append命令,在当前行尾部追加’ order by ename’ List命令 Run命令 List 2命令 Change命令,将当前行中的emp替换为dept List命令 删除第3行 List命令 |
SQL> select * from scott.emp; SQL> edit SQL> L | 输入一条SQL语句 调用DOS全屏幕编辑器(默认为记事本)修改SQL缓冲区,然后保存(保存到默认文件),注意:请别删除最后的“/”命令行; List,查看SQL缓冲区中的SQL语句 |
SQL> set timing on SQL> select * from scott.emp; SQL> set timing off SQL> L SQL> R SQL> set feedback off SQL> r SQL> set feedback on SQL> r | 案例:返回SQL语句的执行时间和记录行数 设置返回并显示SQL语句执行时间,默认OFF 执行一条SQL语句,观察最后一行的提示信息 设置不返回和显示SQL语句执行时间 List,观察SQL缓冲区内容 Run,此时将不返回执行时间 设置不返回和显示记录行数 Run,请观察有无记录行数显示 设置返回和显示记录行数 Run,请观察有无记录行数显示 |
(5)事务控制
SET AUTOCOMMIT ON | OFF 设置自动提交模式开关,默认为Off(关)状态OFF:此时为隐私事务模式,即必须以Commit(提交)或Rollback(回滚)来结束事务,同时也意味着下一个事务的开始;当执行DDL语句或正常退出Sqlplus时(exit或quit命令),会隐含执行commit一次;
ON :此时为自动提交事务模式,即执行每条SQL语句时都会自动提交,也就是说将每条SQL语句作为一个事务,故此,你将没有反悔的机会。
命令与SQL语句例子 | 说 明 |
SQL> connect scott/tiger SQL> set autocommit off SQL> select * from emp where empno=7566; SQL> update emp set sal=sal+100 2 where empno=7566; SQL> select * from emp where empno=7566; SQL> rollback; SQL> select * from emp where empno=7566; | 案例:隐式事务模式(撤销给员工涨工资操作) 以scott用户连接 关闭自动提交(默认),切换到隐式事务模式 查询职员号7566信息,记住SAL列的值 涨工资(SAL列)100元 再查询 回滚(撤销涨工资操作,或commit确认) 再查询,查看:工资SAL还原了吗? |
SQL>set autocommit on … | 案例:自动提交事务模式 打开自动提交 然后再从上例第3条语句开始执行余下的语句 |
(6)SQL脚本文件、SPOOL假脱机
*执行SQL脚本文件(Start/@命令)
创建SQL脚本文件OraCreateTables.sql (内容参见《附录3 SQL脚本文件》),其作用为:创建学生、课程、选课等3张表,并插入若干记录(请观察各SQL语句语法);将该文件复制到C:\目录下,然后执行:
命令与SQL语句例子 | 说 明 |
SQL> connect scott/tiger SQL> start C:\OraCreateTables.sql SQL> desc student; SQL> select * from student; SQL> select * from course; SQL> select * from sc; | 以scott用户连接 执行脚本文件中的SQL语句 查看学生表结构 查询学生表记录 查询课程表记录 查询选课表记录 |
思考:这3张表的所有者是谁?
*SPOOL假脱机输出
SPOOL命令基本用法,如下例:
命令与SQL语句例子 | 说 明 |
SQL> connect scott/tiger SQL> spool c:\emp.txt SQL> desc emp SQL> select * from emp; SQL> spool off | 以scott用户连接 打开SPOOL,将命令与结果输出到c:\emp.txt文件中 查看scott.emp表结构 查询scott.emp表记录 关闭Spool输出,请用记事本打开c:\emp.txt文件,观察其内容 |
命令与SQL语句例子 | 说 明 |
SQL> connect scott/tiger SQL> set trimspool on SQL> set linesize 120 SQL> set pagesize 2000 SQL> set newpage 1 SQL> set heading off SQL> set term off SQL> spool c:\emp2.txt SQL> select EMPNO || ',' || ENAME || ',' 2 || to_char(HIREDATE,'YYYY-MM-DD') 3 || ',' || SAL 4 from emp; SQL> spool off | 以scott用户连接 去除重定向(spool)输出每行的拖尾空格 设置行宽为120个字符 设置每页行数为2000行 不输出域标题(字段名) 不显示脚本中的命令的执行结果 将命令与结果输出到c:\emp2.txt文件中 查询emp表部分字段数据,说明:|| 为字符串连接运算符,数据之间以逗号分隔 关闭Spool输出,请用记事本打开文件c:\emp2.txt,观察其内容 |
spool常用的设置:
set colsep ' ';//设置域输出分隔符,即字段之间的分隔符,如设为空格或逗号
set echo off;//是否显示start启动的脚本中的每个sql命令,缺省为on
set feedback off;//是否回显本次sql命令处理的记录条数,缺省为on
set heading off;//是否输出域标题,缺省为on
set pagesize 0;//输出每页行数,缺省为24,为了避免分页,可设定为0。
set termout off;//是否显示脚本中的命令的执行结果,缺省为on
set trimout on;//是否去除标准输出每行的拖尾空格,缺省为off
set trimspool on;//是否去除重定向(spool)输出每行的拖尾空格,缺省为off
练习:编写一个SQL脚本文件,把SQLPLUS运行环境设置成自己所喜欢的
(7)日期格式问题
一般我们在会话级(一次从连接到断开期间,称为一次会话)设置日期格式。命令与SQL语句例子 | 说 明 |
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; SQL> select * from scott.emp; SQL> alter session set nls_date_format='yyyy-mm-dd'; SQL> select * from scott.emp; SQL> insert into scott.emp(empno,ename,hiredate,deptno) 2 values(8000,'ABC','2015-1-20',20); | 设置日期格式 观察HireDate列的值 设置日期格式 观察HireDate列的值 插入一条记录,此时日期值可以这样用 |
SQL> insert into scott.emp(empno,ename,hiredate,deptno) 2 values(8001,'XYZ',to_date('2015-1-20','yyyy-mm-dd'),20); SQL> select * from scott.emp; | 一般插入日期值需要使用To_date()函数 查看结果 |
学习资料:参见“附录4”中的“表F3-3”与“表F3-4”。
进一步学习(2学时):参见http://blog.chinaunix.net/uid-25492475-id-3140218.html,
或“ORACLE字符集.DOC”。
2.3 SQL Plus(Windows)
与DOS版的SQL Plus启动方式不同、界面不同,增加了菜单,其它功能及用法均一样。*进入SQL Plus(Windows版):“开始菜单à程序àOracleàApplication
DevelopmentàSQL Plus”
2.4 SQL Plus Worksheet(Windows)
与Windows版的SQL Plus界面不同,功能、命令及SQL语句用法均一样。不同点:(1) 从行编辑改成了全屏编辑,但SQL缓冲区、List、Change、Append、Input、Run等命令仍保留;
(2) SQL语句执行结果:在下方单独开辟了一个窗格进行显示
(3) 保留了SQL语句及命令的执行历史,可随时调入执行。
*进入SQL Plus Worksheet(Windows版):“开始菜单à程序àOracleàApplication
DevelopmentàSQL Plus Worksheet”
3. 实验三
启动与停止Oracle数据库(验证型 2学时)
3.0 实验目的与实验内容
Ø 实验目的(1) 学习Oracle数据库的启动与停止命令;参见3.1节
(2) 了解数据库的启动过程,及参数文件、控制文件、数据库文件、日志文件的打开是在哪个阶段;
(3) 学习使用OEM启停Oracle数据库。
Ø 实验内容
(1) 使用Sqlplus进行数据库的启动与停止实验;参见3.2节
(2) 使用OEM进行数据库的启动与停止实验。参见3.3节
3.1 启动与停止ORACLE数据库
启动(startup)或停止(shutdown)Oracle数据库,应以SYSDBA/SYSOPER身份连接。(1)SHUTDOWN命令格式:
SHUTDOWN [ NORMAL | TRANSACTIONAL | IMMEDIATE | ABORT ]功能:关闭(Close)数据库,但不关闭Oracle服务及相关进程。
说明:
SHUTDOWN NORMAL:在命令执行期间,不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复;默认选项,等价于命令:SHUTDOWN。
SHUTDOWN TRANSACTIONAL:在命令执行期间,不允许新的连接、不等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。
SHUTDOWN IMMEDIATE:在命令执行期间,不允许新的连接、不等待会话结束、不等待事务结束、做一个检查点并关闭数据文件。没有结束的事务是自动rollback的。启动时不需要实例恢复。
SHUTDOWN ABORT:在命令执行期间,不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。启动时自动进行实例恢复。
SHUTDOWN命令选项小结,见下表:
命令选项 | 新连接 | 等待会话结束 | 等待事务结束 | 做检查点 | 关闭数据文件 | 执行命令后数据库状态 | 下次启动时自动做实例恢复 |
NORMAL | 不允许 | 等待 | 等待 | 做 | 关闭 | Close | 不需要 |
TRANSACTIONAL | 不允许 | 不等待 | 等待 | 做 | 关闭 | Close | 不需要 |
IMMEDIATE | 不允许 | 不等待 | 不等待 | 做 | 关闭 | Close | 不需要 |
ABORT | 不允许 | 不等待 | 不等待 | 不做 | 不关闭 | Close | 做 |
(2)Oracle数据库的4种运行状态:
Close--数据库关闭,使用Shutdown后;NoMount—数据库未装载,用于创建数据库的数据文件、重建控制文件;
Mount--数据库已装载,用于改变归档模式、修改控制文件、重做数据文件的名称和路径、数据库的备份和恢复;
Open--数据库打开,数据库可正常使用。
注:普通身份的用户是不能在 OPEN
之前登录的;SYSDBA是通过口令文件和操作系统验证,可以在OPEN之前登录。
(3)Oracle数据库的启动过程:
Oracle数据库的正常启动经历4个阶段:shutdown→nomount→mount→open<1> shutdown→nomount过程:
读初始参数文件,按参数分配物理内存,启动后台进程,定位到控制文件,打开报警(alert)文件,记录启动过程;
Nomount状态只能访问与SGA区相关的动态性能视图:v$parameter、v$sga、v$option、v$process、
v$version、v$instance,这些视图与数据库无关。
<2> nomount→mount过程:
打开控制文件,确认数据库的结构信息,将数据库和实例关联在一起;
Mount状态可以访问与控制文件相关的动态性能视图:v$thread、v$controlfile、v$database、v$datafile、v$datafile_header、v$logfile;
以下任务必须在mount状态下进行:命名数据文件,启用和禁用重作日志归档选项,执行完全数据库恢复。
<3> mount→open过程:
打开数据文件,打开重做日志文件;
最后阶段中,oracle服务器验证所有数据文件和重做日志文件是否可以打开,并检查数据库的一致性,如果需要,smon进程会启动例程恢复。
(4)STARTUP命令格式:
STARTUP [ NOMOUNT | MOUNT | [OPEN [open_选项]]] [FORCE] [RESTRICT] [PFILE=filename]其中 open_选项 为:READ {ONLY | WRITE [RECOVER]} | RECOVER
说明:
STARTUP NOMOUNT:启动数据库到NOMOUNT
STARTUP MOUNT:启动数据库到MOUNT
STARTUP OPEN:打开数据库
STARTUP:等价于 - STARTUP OPEN
STARTUP FORCE:中止当前数据库的运行(shutdown abort),并重新启动数据库(startup)
STARTUP RESTRICT:只允许具有RESTRICTED SESSION权限(一般为DBA等特权用户)的用户访问数据库;这种方式常用来对数据库进行维护,如数据导入/导出操作时不希望有其他用户连接到数据库操作数据。
STARTUP PFILE=filename:以filename为初始化文件启动数据库,而不采用缺省初始化文件
STARTUP RECOVER:数据库启动,并开始介质恢复
(5)相关SQL语句
-- ALTER DATABASE
ALTER DATABASE MOUNT; --将数据库从nomount状态修改到mount状态ALTER DATABASE OPEN; --将数据库从mount状态修改到open状态
ALTER DATABASE OPEN READ ONLY; --将数据库从mount状态修改到open只读状态
3.2 使用SQLPLUS命令启停Oracle数据库
命令例子 | 说 明 |
SQL> connect / as sysdba SQL> SHUTDOWN IMMEDIATE | 以SYSDBA身份连接 关闭Oracle数据库,在控制面板中查看Oracle服务,服务停止了吗?为什么? |
SQL> SHUTDOWN IMMEDIATE SQL> STARTUP NOMOUNT SQL> ALTER DATABASE MOUNT; SQL> ALTER DATABASE OPEN; | 先关闭Oracle数据库(startup前需先关闭数据库) 启动本地Oracle数据库到NoMount Mount装载数据库 Open打开数据库 |
SQL> STARTUP MOUNT SQL> ALTER DATABASE OPEN; | 启动本地Oracle数据库到Mount状态(需先关闭) Open打开数据库 |
SQL> STARTUP OPEN | 启动并打开本地Oracle数据库(需先关闭) |
SQL> STARTUP OPEN Ora92LSH | 启动本地Oracle数据库Ora92LSH(需先关闭) |
(1)另开一个sqlplus窗口,运行一个事务,在未结束事务时,实验各种shutdown命令;
(2)oracle实例在nomount或mount状态时,进行startup命令,结果会如何?
3.3 使用OEM工具启停Oracle数据库
(1)在Oracle服务器本机上启动OEM;(2)以SYSDBA身份连接数据库;
(3)在“例程—>配置”中,勾选“显示所有状态”;
(4)勾选“例程状态”相应选项后,点击应用,以启动或停止数据库。
请验证:
(1)上面第2步,若使用Normal或Sysoper身份连接,可进行数据库的启停操作吗?
(2)在客户机(非Oracle服务器本机)上连接Oracle服务时,可否启停数据库?
4. 实验四 DBCA创建数据库(验证型
2学时)
4.0 实验目的与实验内容
Ø 实验目的(1) 学习使用DBCA创建和数据库;
(2) 了解数据库的基本结构,进一步理解OracleHome、SID、Oracle数据库、Oracle服务、Listener服务、Oracle实例等相关概念;
Ø 实验内容
(1) 使用DBCA创建数据库OraABC;
(2) 在OraABC数据库中创建一个用户及该用户的一些数据库对象(可选做);
(3) 复制OraABC和原数据库(yangtzeu)数据库文件,给Oracle冷备份实验做准备;
(4) 使用DBCA删除数据库OraABC。
4.1 DBCA创建数据库
使用DBCA创建数据库OraABC,实验步骤如下:(1) 打开DBCA:“开始菜单à程序àOracleàConfiguration and Migration ToolsàDatabase Configuration Assistant”;
(2) 进入“欢迎使用”窗口,查看DBCA的功能,单击“下一步”按钮;
(3) 选择“创建数据库”选项,单击“下一步”按钮;
(4) 选择“General Purpose”(通用型DB)选项,点击“显示详细资料”,查看信息后关闭详细资料窗口,单击“下一步”按钮;
(5) 在“全局数据库名称”文本框键入OraABC(SID让系统自动指派),单击“下一步”按钮;
(6) 选择“专用服务器模式”,单击“下一步”按钮;
(7) 进入“初始化参数”窗口,仔细查看“内存”、字符集、数据库大小、文件位置、归档等页的内容,及“所有初始化参数”、“文件位置变量”内容,不做修改(均采用默认值),单击“下一步”按钮;
(8) 进入“数据库存储”窗口,仔细查看Controfile、数据文件、重做日志组等内容和文件位置,不做修改,,单击“下一步”按钮;
(9) 进入“创建选项”窗口,勾选“创建数据库”,单击“完成”按钮;
(10) 弹出“概要”窗口,可查看详细配置,点击“确定”,开始创建数据库。
(11) 当数据库创建完成之后,可激活帐户SCOTT,并修改账户SYS和SYSTEM的密码。
观察与思考:
(1)安装过程中输入了“全局数据库名”(及SID),为何没有输入OracleHome名?
(2)进入控制面板à服务,观察:增加了哪些Oracle服务?而Listener不变,说明了什么?
(3)启动OraABC和原有数据库的Oracle服务,并打开Windows的任务管理器,查看有几个Oracle.exe进程?
(4)进入Oracle安装目录,观察下列目录有何变化?增加了哪些文件?
C:\ oracle\admin;
C:\oracle\ora92\database;
C:\oracle\ora92\dbs;
C:\oracle\oradata;
(5)进入Oracle Net Manager,查看有何变化?
(6)思考数据库OraABC与原有数据库的关系:
<1> 这2个数据库有不同的SID,但OracleHome和Listener均只有一个(说明这2个Oracle数据库共用一套Oracle程序?);
<2> 这2个数据库相互独立,有各自的数据字典(系统表)、用户、数据库对象、表空间、数据文件、日志、控制文件等;在Oracle Net配置、数据库启停、连接等方面也相互无关。
(7)请思考OracleHome与SID概念的含义,理解Listener的作用。
4.2 使用数据库OraABC(可选做)
(1)在OraABC中创建一个表空间(2)创建一个用户
(3)创建若干表
4.3 复制数据库文件
为实验5(oracle冷备份)做准备:请先shutdown关闭数据库OraABC和原数据库Ora92LSH(4#-5楼机房:yangtzeu),再将C:\oracle\admin;C:\oracle\ora92\database; C:\oracle\ora92\dbs; C:\oracle\oradata等4个目录及其下的所有文件复制下来。
4.4 删除数据库
使用DBCA删除数据库OraABC。5. 实验五 Oracle数据库冷备份(验证型
2学时)
5.0 实验目的与实验内容
Ø 实验目的(1) 学习Oracle数据库冷备份的方法与备份内容;
(2) 了解数据库冷备份的恢复(还原)方法;
Ø 实验内容
(1) 先在现有数据库中创建一些对象,以便在数据库还原后进行验证;
(2) Oracle数据库冷备份;
(3) 利用冷备份文件进行Oracle数据库恢复,并进行验证。
5.1 Oracle冷备份与恢复所需要的条件
(1)oracle数据库导出时候的条件,在恢复时都必须具备;(2)恢复时,需要一个版本号完全一样的oracle安装盘,包括小版本号;(以防Oracle被破坏)
(3)恢复时,要有与服务器一样的操作系统,包括补丁;
(4)在数据库服务器上,实例是被shutdown情况下拷贝的;
(5)要拷贝全部的参数文件、控制文件、数据文件、日志文件;如果漏拷文件,下次再拷贝,需要全部的重新拷贝一次;不需要拷贝oracle实例的归档日志,不需要拷贝oracle的支持文件。
5.2 Oracle数据库冷备份
*工作内容如下:(1)查询并记录:OS版本号、OS补丁,Oracle版本号(包括小版本号,如:9.2.0.1.0),Oracle安装目录,语言及字符集,Oracle
Home名,SID名;
(2)查询并记录:参数文件、控制文件、数据文件、日志文件等的目录及文件名,ADMIN目录;
(3)shutdown停止数据库;
(4)复制上述2中的所有文件。
*Sqlplus操作步骤(以oracle 9.2.0.1.0为例):
(1) 以SYSDBA身份连接到要备份的Oracle数据库实例;
(2) 查询Oracle数据库实例名:
SQL>select name from v$database;
(3) 查询控制文件位置:
SQL>select name from v$controlfile;
(4) 查询数据文件位置:
SQL>select name from v$datafile;
(5) 查询重做日志文件位置:
SQL>select member from v$logfile;
(6) 查询spfile<SID>.ora(或spfile.ora或pfile.ora)参数文件位置:
SQL>show parameter spfile
或:
SQL>show parameter pfile
上面结果表示:
C:\oracle\ora92\database\SPFILEORA92LSH.ORA
Oracle目录与名称表示法如下:
Oracle表示法 | 含义 | 本手册实验环境对应名 | 你的实验环境是? |
%ORACLE_BASE% | Oracle安装目录 | C:\oracle | |
%ORACLE_HOME% | OracleHome目录 | C:\oracle\ora92 | |
%ORACLE_NAME% | Oracle实例名称 | Ora92LSH | |
%ORACLE_SID% | Oracle SID名 | Ora92LSH |
注:Spfile、pfile、init文件一般在以下目录找:
<oracle安装目录>\database,如:C:\oracle\ora92\database
<oracle安装目录>\dbs,如:C:\oracle\ora92\dbs
(8) 查看ADMIN目录下的所有目录及文件,如:C:\oracle\admin
(9) 停止Oracle数据库
SQL>shutdown immediate
(10) 将查找的上述所有文件(包括ADMIN目录)一次拷贝完成
*spfileSID、spfile、pfile、initSID与Oracle数据库启动(startup
nomount)顺序:
<1> 首先是使用服务器上的spfile<SID>文件启动实例;
<2> 如果没有找到spfile<SID>就是用默认的spfile文件启动;
<3> 如果又没找到默认的spfile文件就使用服务器上的init<SID>文件启动实例;
<4> 若没有找到init<SID>就找服务器上默认的pfile文件启动实例。
*OEM操作:可以查询除参数文件(及ADMIN目录)外的其他文件的位置
5.3 Oracle数据库冷备份的恢复操作
(1)进入DOS,“开始菜单à运行à输入cmd”;(2)设置Oracle默认SID名称(冷备份时的SID名称,如Ora92LSH或OraABC):
DOS>set oracle_sid=Ora92LSH
(3)创建新的Oracle服务,命令如:
DOS>oradim -new -sid Ora92LSH -intpwd
123456 -pfile <冷备份时的spfile、或pfile、或init等文件的目录及文件名>
其中:
-new 在控制面板服务中增加一个新的Oracle服务;
-sid Ora92LSH 增加的服务名为“OracleServiceOra92LSH”;
-intpwd 123456 在C:\oracle\ora92\database目录下创建一个sysdba的密码验证文件“PWDOra92LSH.ora”,验证密码为“123456”(可自行设置,下面步骤8可能要用);
-pfile <目录及文件名> 告诉Oracle服务,spfile或init参数文件的位置与文件名;该选项如:
-pfile C:\oracle\ora92\database\spfileOra92LSH.ORA
。
(4)复制spfile、和(或)pfile、和(或)int等参数文件到(冷备份时的)原目录位置;
(5)重启Listener监听器,如下:
DOS> lsnrctl stop
DOS> lsnrctl start
(6)把ADMIN目录下的所有目录及文件拷贝到原来位置;
(7)把控制文件、数据文件、重做日志文件拷贝到原来的位置;
(8)进入sqlplus,并以sysdba身份登录;(可能要用步骤3中设置的密码)
DOS> sqlplus “/as sysdba”
(9)启动数据库到nomount状态
SQL>startup nomount
(10)启动数据库到mount状态
SQL> Alter database mount;
(11)启动数据库到open状态
SQL> Alter database open;
(12)重启动oracle数据库实例,看能否正常启动和关闭
SQL> shutdown immediate;
SQL> startup;
注:
(1) 请记录恢复实验过程中出现的所有问题,并在网上查找解决办法;
(2) Oracle冷备份有多个具体方法,存在细节上的差异,但基本思想相同;
(3) Oracle热备份请在网络和书籍中查找;
(4) Oracle有专用备份工具RMAN。
6. 实验六 PL/SQL实验与PL SQL Developer工具(综合型
8学时)
6.0 实验目的与实验内容
Ø 实验目的(1) 学习第三方工具PL SQL Developer的使用;
(2) 学习Oracle对SQL标准的扩展和Oracle函数;
(3) 学习SQL标准的事务隔离级别,以及Oracle事务隔离级别;
(4) 学习Oracle各种数据库对象的创建与使用;
(5) 学习Oracle的PL/SQL编程与调试;
(6) 了解Oracle对分布式数据库的功能支持。
Ø 实验内容
(1) PL SQL Developer的安装与使用;
(2) Select查询:多表连接查询、集合查询、树形查询、With子查询,PL SQL Developer查询生成器;
(3) Oracle事务隔离级别
(4) 使用Oracle函数;
(5) Oracle数据库对象:表、索引、视图、序列、同义词、分区、簇、数据库链;
(6) PL/SQL编程实验:游标、存储过程、函数、触发器、包;
(7) Oracle的分布式DB实验:数据库链、快照表(物化视图)、分布式查询、分布式事务。
6.1 PL SQL Developer工具简介(演示)
PL SQL Developer的作用与Sqlplus基本相同,但功能更加强大,可以将它看作是sqlplus与OEM的融合;它是程序员最常用的Oracle工具;安装包自带PDF中文和英文使用手册。演示与讲解如下:
(1) PL SQL Developer的安装、序列号生成工具、汉化包(不推荐使用)、使用手册(中、英);
Win7/8(64位OS)下的PL
SQL Developer(32位)安装方法,参见《附录5》;
(2) 登录;
(3) 常用工具(Tools)窗口:
工具名称 | 菜单操作 | 功能简介 |
Connections (连接) | Tools(工具)à connections(连接) | Oracle当前连接,及连接历史记录 |
Objects (对象) | Tools(工具)à Object Browser(对象浏览器) | Oracle的对象浏览器,其中2个过滤器分别按用户(如SCOTT)和对象使用类型(如All objects)进行筛选 |
Window list (窗口列表) | Tools(工具)à Window list(窗口列表) | |
Templates (模板) | Tools(工具)à Templates list(模板列表) | 提供SQL语句、函数、PL/SQL块、循环、错误处理等语句模板 |
(5) 查看、编辑表的结构、约束、索引、权限、存储参数、触发器、数据等:对象浏览器中表的右键菜单,如“ObjectsàTablesàSCOTT.EMPà(右键菜单)”,常用功能如下:
菜单 | 功能 | 备注 |
New… | 创建新表 | “View SQL”可在窗口和SQL脚本之间切换 |
Duplicate… | 复制该表(结构、约束等)到其它用户 | |
Properties | 显示表的基本情况,如名称、所有者、存储参数、已有记录信息等 | |
Describe | 显示表结构,等价于Sqlplus的Desc命令 | |
View | 查看表的结构、约束、索引、权限、存储参数、触发器等 | 不能修改 |
Edit | 编辑表的结构、约束、索引、权限、存储参数、触发器等 | |
Rename | 修改表的名称 | |
Drop | 删除表对象 | |
Query data | 查询表数据,并可导出数据、绘制统计图 | * 使用的是SQL窗口 |
Edit data | 编辑表数据;修改后,要post change ,再commit 、或rollback;刷新数据,即执行SQL窗格中的select语句,使用; | * post change作用是将编辑的数据转换为相应的insert、delete、update语句,并发送到oracle服务 * 使用的是SQL窗口 |
Export data | 导出多张表及其数据 | 可替代Oracle的Exp工具 |
Window”,可编辑和执行多条SQL语句,全屏幕编辑器,可先选中一条或多条SQL语句然后执行,事务结束需要提交、或回滚;
(7) Command Window(命令窗口):相当于sqlplus执行环境,“File(文件)àNew(新建)àCommand
Window”;
(8) Program Window(程序窗口):可编辑和创建存储过程、函数、触发器、包、类型等的SQL脚本;如创建函数:“File(文件)àNew(新建)à Program
WindowàFunction”;
(9) Test Window(测试窗口):可对存储过程、函数等进行调试运行(调试工具!!!),“File(文件)àNew(新建)àTest
Window”;
6.2 Oracle的SQL标准扩展
(1)多表连接查询
在Oracle所有版本中,均支持使用(+) 表示的左连接与右连接语法,如:
SQL语句例子 | 说明 |
Select t.*, s.* From SCOTT.EMP t, SCOTT.DEPT s Where t.DEPTNO(+) = s.DEPTNO; Select t.*, s.* From SCOTT.EMP t right outer join SCOTT.DEPT s on t.deptno=s.deptno; Select t.*, s.* From SCOTT.EMP t right join SCOTT.DEPT s on t.deptno=s.deptno; | 右连接,=号左边的(+)表示以空行补全左边表的记录 SQL标准(右连接),等价于上句 SQL标准(右连接),可省略词outer |
Select t.*, s.* From SCOTT.EMP t, SCOTT.DEPT s Where t.DEPTNO = s.DEPTNO(+); Select t.*, s.* From SCOTT.EMP t left join SCOTT.DEPT s on t.deptno=s.deptno; | 左连接,=号右边加(+) SQL标准(右连接),等价于上句 |
Select t.*, s.* From SCOTT.EMP t, SCOTT.DEPT s Where t.DEPTNO(+) = s.DEPTNO(+); Select t.*, s.* From SCOTT.EMP t full join SCOTT.DEPT s on t.deptno=s.deptno; | 全连接,试试左边语句?Oracle不支持(+)表示的全连接!! SQL标准(全连接) |
(2)PL SQL Developer查询生成器
使用方法如下:1> 在SQL Window中,将光标定位在要生成的Select语句位置;
2> 然后选择菜单
“Tools(工具)àQuery Builder…(查询生成器)àInternal Query Builder(内部)”
或
“Tools(工具)àQuery Builder…(查询生成器)àActive Query Builder(插件Plug-in)”;
下面以Active Query Builder为例介绍:
3> 不带group by子句时操作(grouping:no check):
² 添加表、内联与外链操作;
² select子句(output:check);
² where条件(Criteria、Or)
² order by子句(Sort type、Sort Order);
4> 带group by子句时操作(grouping:check):
² group by子句(grouping:check + Criteria for:for groups);
² select子句集函数(Aggregate:sum|Avg等
+ Criteria for:for groups);
² having子句(Criteria for:for groups + Criteria);
² where子句(Criteria for:for values + Criteria)。
(3)集合查询
-- 并、交、差操作
Oracle集合运算符如下:² UNION:(并集)返回两个集合的所有的记录(去掉重复值);
² UNION ALL:(并集)返回两个集合的所有的记录(不去掉重复值);
² INTERSECT:(交集)返回两个集合的所有记录,重复的只取一次;
² MINUS:(差集)返回属于第一个集合,但不属于第二个集合的所有记录;
说明:集合运算中各个集合必须有相同的列数,且类型一致,集合运算的结果将采用第一个集合的表头作为最终的表头,order by必须放在每个集合后。
SQL语句例子 | 说明 |
select * from SCOTT.emp where sal<=2500 union select * from SCOTT.emp where sal>=2000; | Union--并集操作(SQL标准),去掉重复记录 |
select * from SCOTT.emp where sal<=2500 union all select * from SCOTT.emp where sal>=2000; | Union all--并集操作,不去掉重复记录 |
select * from SCOTT.emp where sal<=2500 INTERSECT select * from SCOTT.emp where sal>=2000; | Intersect--交集操作(SQL标准) |
select * from SCOTT.emp where sal<=2500 MINUS select * from SCOTT.emp where sal>=2000; | Minus--差集操作 注:SQL Server运算符为except |
(4)树形递归查询
Oracle树形递归查询语句的基本语法是:select ... from <tablename> [where <条件3>]
start with <条件1>
connect by <条件2>;
其中:
<条件1>
是开始查询的根结点的条件,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树;
<条件2>
是递归的连接条件,其中用PRIOR表示上一条记录;
<条件3>
是过滤条件,用于对返回的所有记录进行过滤。
职员表SCOTT.EMP中每个职员均有直接上级主管,若将记录看成节点,则表呈现出树形结构。
SQL语句例子 | 说明 |
select * from SCOTT.emp start with empno=7369 connect by empno = prior mgr; select * from SCOTT.emp start with empno=7369 connect by prior mgr = empno; | 例:从下往上查,即从树中某节点开始向上查到树根 查询7369的所有上级主管 ß 开始节点的查询条件(可以有多条) ß 待查记录的empno等于已查记录(prior)的Mgr (功能同上句) |
select * from SCOTT.emp start with empno=7566 connect by prior empno = mgr; select * from SCOTT.emp start with empno=7566 connect by mgr = prior empno; select * from SCOTT.emp where sal>1000 start with empno=7566 connect by prior empno = mgr; | 例:从上往下查,即从树中某节点开始向下遍历其子树 查询7566的所有下级职员 ß 开始节点的查询条件 ß 已查记录(prior)的empno等于待查记录的Mgr (功能同上句) (树查询功能同上句) ß where对树形递归查询后的结果再次筛选 |
connect by prior parent_id = id; 或 connect by id =
prior parent_id;
表示上一条记录的parent_id是本条记录的id,即上条记录的父亲是本记录,故从下向上查。
connect by prior id = parent_id; 或 connect by parent_id =
prior id; 表示上一条记录的id是本条记录的parent_id,即本条记录父亲是上条记录,故从上向下查。
(5)Oracle的With子查询
当查询中多次用到某一部分子查询时,可以用Oracle with语句创建一个公共临时表。因为子查询在内存临时表中,避免了重复解析,所以执行效率会提高不少。临时表在一次查询结束后自动清除。一般语法格式:
with
alias_name1 as (subquery1),
alias_name2 as (subQuery2),
……
alias_nameN as (subQueryN)
select ……
from alias_name1,alias_name2,……,alias_nameN
where ..... ;
SQL语句例子 | 说明 |
with t as (select avg(sal) avgSal from SCOTT.emp where deptno=20) select e.*,t.* from SCOTT.emp e,t where e.sal >= t.avgSal; | 临时表t代表()中的语句 使用了t的select语句 |
select e.*,t.* from SCOTT.emp e, (select avg(sal) avgSal from SCOTT.emp where deptno=20) t where e.sal >= t.avgSal; | (等价于上例) from内嵌的子查询t |
6.3 Oracle事务隔离级别
(1)SQL标准的事务隔离级别
设置隔离级别的SQL语句:SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED | READ COMMITTED | REPEATABLE
READ | SERIALIZABLE]
其中:Read Uncommitted
(未提交读);Read Committed(提交读);Repeatable Read(可重复读);Serializable(序列化/串行化),默认值。
设置事务的隔离级别,即意味着数据库按照其隔离级别(协议)进行自动加锁。
隔离级别所解决的并发控制问题、及所采用的封锁协议如下表:
事务隔离级别 | 并发控制问题 | 封锁协议 | |||
丢失修改 | 脏读 | 不可重复读 | 幻读 | ||
有 | 有 | 有 | 有 | 无协议:无写锁X,无读锁S | |
Read Uncommitted | 无 | 有 | 有 | 有 | 一级:加X锁**,无S锁 |
Read Committed | 无 | 无 | 有 | 有 | 二级:加X锁**,加S锁* |
Repeatable Read | 无 | 无 | 无 | 有 | 三级:加X锁**,加S锁** |
Serializable | 无 | 无 | 无 | 无 | 表锁、页锁等范围锁?? |
2. **--表示直到事务结束时才释放该锁;*--表示读完即释放该锁。
(2)Oracle事务隔离级别
Oracle数据库支持Read Committed(默认值)和Serializable这两种事务隔离级别:SET TRANSACTION ISOLATION LEVEL [READ COMMITTED | SERIALIZABLE]
Oracle为了提高事务的并发度而采用了回滚段技术,故在Read Committed隔离级别下,不会出现读脏数据现象,但是会出现读旧数据问题。
(3)Oracle并发事务实验
l Read Committed隔离级别下的并发实验并发实验1 在PL SQL Developer中使用Scott连接,并打开2个SQL
Window,分别代表事务T1和T2:
顺序 | T1(1,4,7) | T2(2,3,5) | 说明 |
1 | SET TRANSACTION ISOLATION LEVEL READ COMMITTED; select * from emp where empno=7369; | T1:职员7369的工资Sal=800 | |
2 | SET TRANSACTION ISOLATION LEVEL READ COMMITTED; update emp set sal = sal + 30 where empno=7369; | T2:工资涨30元 | |
3 | select * from emp where empno=7369; | T2:查询其工资Sal为830元 | |
4 | select * from emp where empno=7369; | T1:查询其工资Sal仍为800元 | |
5 | commit; | T2结束,开始一个新事务T3 | |
6 | select * from emp where empno=7369; | T3:查询其工资Sal为830元 | |
7 | select * from emp where empno=7369; | T1:查询其工资Sal变为830元 |
(1)步骤4:T1没有读到T2未提交的数据830(可能会成为脏数据),说明没有脏读现象;而此时T2已经将其工资改为了830(且之后成功提交),说明T1读到了旧(老)数据;
(2)步骤4:按照二级封锁协议,T2对emp表的7369记录应该加了X锁,此时T1不能读该记录,应该处于等待状态,但T1仍成功读取而没有等待,说明Oracle回滚段技术提高了并发度,且没有采用二级封锁协议(即未加读锁);
(3)步骤7:结果说明T1出现不可重复读现象。
练习:将步骤5中的Commit改为Rollback,再做一次实验(先将7369的工资改回800);结果会有何不同?
并发实验2 并发更新实验(先将7369的工资改回800):
顺序 | T1(1,3,5) | T2(2,4,7) | 说明 |
1 | SET TRANSACTION ISOLATION LEVEL READ COMMITTED; select * from emp where empno=7369; | T1:职员7369的工资Sal=800 | |
2 | SET TRANSACTION ISOLATION LEVEL READ COMMITTED; select * from emp where empno=7369; | T2:职员7369的工资Sal=800 | |
3 | update emp set sal = sal + 30 where empno=7369; select * from emp where empno=7369; | T1:工资涨30元 T1:查询其工资Sal为830元 | |
4 | update emp set sal = sal + 50 where empno=7369; | T2:工资涨50元,发现一直在执行… | |
5 | commit; | T1结束,开始一个新事务T3;此时步骤4才执行完成 | |
6 | select * from emp where empno=7369; | T3:查询其工资Sal为830元 | |
7 | select * from emp where empno=7369; commit; | T2:查询其工资Sal变为880元 T2结束,开始一个新事务T4 | |
8 | select * from emp where empno=7369; | T3:查询其工资Sal为880元 |
(1)步骤4、5结果说明了什么?步骤6、7、8呢?
(2)请小结:Oracle在Read Committed隔离级别下是如何加锁的?
l Serializable隔离级别下的并发实验
并发实验3 将上述并发实验1中的T1的隔离级别修改为Serializable后进行实验(先将7369的工资改回800)
顺序 | T1 | T2 | 说明 |
1-6 | … | … | (步骤同上例) |
7 | select * from emp where empno=7369; | T1:其工资Sal仍为800元!!why?? | |
8 | commit; / rollback; | T1结束(提交或回滚) | |
9 | select * from emp where empno=7369; | T4:工资Sal变为830元 |
(1)T1级别为SERIALIZABLE,即使事务T2在提交了数据之后,事务T1还是看不到T2提交的数据,因为幻想读和不可重复读在T1中都不允许了。
(2)因为T1级别是SERIALIZABLE,所以T1所查询的数据集是T1事务开始前数据库的数据;即,事务T2在事务T1开始之后的insert和update操作的影响都不会影响事务T1。
(3)那如何能查看到T2更新的记录呢?
重开一个新事务,如上面的T4。
练习:将并发实验2中事务T1和T2的Read
Committed均修改为Serializable后,再做一次实验(先将7369的工资改回800);结果是?
6.4 Oracle常用函数
实验内容:参见《附录4 Oracle常用函数》。PL SQL Developer的模板工具窗口的SQL function目录下有所有Oracle函数及其格式。
6.5 Oracle数据库对象的创建、维护与使用
请同学们根据教材和讲授内容自行实验,数据库对象应包括:表、索引、视图、序列、同义词、分区、簇、数据库链、抽象类型等。6.6 PL/SQL:游标、触发器、存储过程、函数、包
请同学们根据课程教材和讲授内容自行实验。6.7 Oracle分布式DB功能实验
涉及内容:数据库链、快照表(物化视图)、分布式查询、分布式事务。
附录1. 实验内容--知识点
1. 启动Oracle服务、监听服务*Oracle启停:控制面板-->服务、DOS命令(oradim工具)、SQL
Plus
*概念:Oracle启动的几个步骤
2. Net配置(Oracle Net Manager)--本地及远程Oracle服务器
*监听程序
*服务命名及测试
*配置文件(TNSNames.ora、Listener.ora)
3. 进入OEM(Oracle企业管理器)--SYSDBA
*添加数据库节点
*登录(Normal、SysOper、SysDBA)
4. OEM管理存储
*表空间(TableSpace):SYSTEM、TEMP、UNDO、TOOLS、USERS、自定义表空间
*表空间:状态(联机|脱机|只读)、类型(永久|临时TEMP|还原UNDO)、默认存储参数(段、区、块,启动日志记录)
*数据文件与表空间
*重做日志组与重做日志文件
*归档日志,及其与重做日志、归档日志模式之间的关系
5. OEM管理用户(User)、角色(Role)、权限(Privilege)、概要文件(Profile)
*用户:SYS、SYSTEM、SCOTT、自定义用户
*角色:CONNECT、RESOURCE、DBA、自定义角色
*系统权限:SYSDBA、SYSOPER、SELECT ANY
DICTIONARY、CREATE ANY TABLE、ALTER ANY TABLE、DROP
ANY TABLE等含义
*对象权限:如表的SELECT、INSERT、DELETE、UPDATE等权限,存储过程的EXEC权限
*概要文件:DEFAULT、自定义概要文件
*用户与表空间、角色、系统权限、对象权限、概要文件之间的关系
*角色与角色、系统权限、对象权限之间的关系
*授权与回收权限语句:Grant、Revoke
6. OEM管理数据库对象
*表Table、
*视图View、
*索引Index、
*序列Sequence
*同义词Synonym
*数据库链DatabaseLink
*快照 ??SnapShot
??
*触发器Trigger
*存储过程Procedure
*函数Function
*包Package
*方案与用户
7. OEM管理服务器例程
*例程配置:状态(关闭|已启动|已装载|打开)、数据库与例程信息、初始化参数、内存(SGA、PGA等)、恢复、还原
*会话
*锁
8. DBCA创建、修改、删除Oracle数据库
9. Oracle数据库的冷备份与恢复、热备份与恢复等实验
10. Oracle Home Selector工具,用于机器安装有多个Oracle版本时,选择默认版本
11. OraDIM(DOS/Unix命令行工具),用于手工进行Oracle服务的创建、修改、删除、启动、停止等工作
12. LsnrCtl(DOS/Unix命令行工具),用于Listener监听器的启动、关闭、及查看监听状态
13. TnsPing(DOS/Unix命令行工具),用于客户端测试Oracle监听服务能否ping通
Oracle Net 命令行工具tnsping,是一个OSI会话层的工具,它用来:
1)验证名字解析(name resolution,是oracle自己的网络服务名)
2)远程的listener是否启动
也就是说:
1> tnsping 命令可以检查tcp协议是否已通,俗称我们说的网络通不通
2> tnsping命令监听服务器上的监听是否已开启
3> tnsping命令不检测服务器上的监听的服务名,所以tnsping通,不代表就能连通。
14. SQL Plus(DOS)、SQL Plus(Windows)、SQL
Plus Worksheet(Windows)
15. EXP/IMP(数据导出/导入DOS命令行工具),用于Oracle数据的导出与导入
16. PL SQL Developer(强大的第三方Oracle工具)
附录2. SQL Plus常用命令
表 F2-1 SQL Plus常用命令SQL*Plus命令 | 缩写 | 类别 | 含义与例子 |
ACCEPT variable [type] | ACC | 从键盘输入值到宏变量,如下例给a输入数字20;引用时前加“&”号,即&a;相似命令--Define SQL> acc a number SQL> select * from scott.emp where deptno=&a; | |
APPEND text | A | 编辑 | 把字符串增加到当前行的末尾 |
CHANGE /old/new/ | C | 编辑 | 把当前行的旧字符串替换成新字符串 |
CHANGE /text/ | C | 编辑 | 把当前行中字符串删除 |
CLEAR BUFFER | CL BUFF | 编辑 | 从SQL缓冲区中删除所有行 |
CONNECT [userid [/password] [@servername] [AS SYSOPER | SYSDBA]] | CONN | 连接 | 连接Oracle(登录),例: conn scott/tiger --以SCOTT用户连接本地Oracle conn scott/tiger@ora92lsh --连接到ORA92LSH conn system/manager as sysdba --以SYS连接本地 |
DEFINE [variable] | [variable = text] | DEF | 运行 | 定义宏变量,如: SQL> def a='where deptno=20' SQL> select * from scott.emp &a; |
DEL | 编辑 | 删除当前行 | |
DESCRIBE tablename | DESC | 查看 | 显示任何数据库表的数据结构 |
DISCONNECT | 连接 | 断开连接 | |
EDIT | ED | 编辑 | 用默认的编辑器(记事本)编辑缓冲区中的内容 |
EDIT filename | ED | 编辑 | 用默认的编辑器(记事本)编辑指定文件,如: Edit D:\test.sql |
EXIT | 退出SQL*Plus,并默认执行一个COMMIT语句 | ||
GET filename | 编辑 | 把以filename为名字的文件内容调入SQL缓冲区中 | |
INPUT | I | 编辑 | 插入许多行 |
INPUT text | I | 编辑 | 插入一个包含text字符串的行 |
HOST command | HO | 运行 | 在SQL*Plus中执行一个操作系统命令 |
LIST | L | 编辑 | 显示SQL缓冲区的所有行 |
LIST n | L | 编辑 | 显示SQL缓冲区中的第n行,并作为当前行 |
LIST m n | L | 编辑 | SQL缓冲区中的从第m行显示到第n行 |
Print | |||
PROMPT text | 当运行一个命令文件时,显示文本 | ||
RUN | R | 运行 | 显示并运行在缓冲区中的当前SQL命令 |
/ | 运行 | 运行在缓冲区中的当前SQL命令 | |
RUNFORM filename | 运行 | 从SQL*Plus中运行一个Oracle Forms应用程序 | |
SAVE filename | 编辑 | 把SQL缓冲区中的内容保存到以filename为名字的文件中,默认路径为orawin\bin | |
SET ARRAYSIZE n | 环境 | ArraySize表示一次从服务器端获取的记录行数,默认15,加大该值可加快SQL语句返回速度 | |
SET AUTOCOMMIT ON | OFF | 环境 | 设置自动提交事务模式是否开启,OFF时需要COMMIT或ROLLBACK结束事务,默认OFF(否) | |
SET FEEDBACK ON | OFF | 环境 | 设置是否显示最后一行的记录行数信息,默认ON | |
SET HEADING ON | OFF | 环境 | 设置是否输出列标题,默认ON | |
SET LINESIZE n | 环境 | 设置屏幕宽度(字符个数),默认80 | |
SET LONG n | 环境 | 设置LONG字段类型数据在SQL Plus中的长度,默认80 | |
SET PAUSE ON | OFF | 环境 | 设置显示是否暂停,ON会使屏幕显示暂停,按下ENTER键,再显示下一页,默认为OFF | |
SET SQLPROMPT "string" | 环境 | 设置SQL Plus提示符,默认"SQL>" | |
SET TIMING ON | OFF | 环境 | 设置是否返回耗时,可用来估计SQL语句的执行时间,测试性能,默认为OFF | |
SHOW ALL | SHO | 查看 | 显示所有68个环境变量值 |
SHOW ERROR | SHO | 查看 | 显示错误 |
SHOW USER | SHO | 查看 | 显示当前连接的用户 |
SHOW AUTOCOMMIT | SHO | 查看 | 显示环境变量AutoCommit的值 |
SHOW TIMING | SHO | 查看 | 显示环境变量Timing的值 |
SPOOL filename | SPO | SPOOL | 写所有的后面的命令或者输出到一个已经命名的文件中。假脱机输入输出文件的后缀为.LIS |
SPOOL OFF|OUT | SPO | SPOOL | OFF 关闭假脱机输入输出文件;OUT改变假脱机输入输出,送文件到打印机上 |
START filename | @ | 运行 | 运行以前保存的命令文件 |
VARIABLE variable [<字段类型>] | VAR | 运行 | 定义Bind变量(宿主变量),可用于存储过程的IN/OUT变量,使用时变量前加“:”号,如: SQL> VAR a number; --定义变量 SQL> EXEC :a := 100; --赋值 SQL> print :a; --显示变量a的值 SQL> select :a from dual; --查询等SQL语句中使用 |
HELP [topic] | ? | 帮助 | 显示帮助信息。注:帮助信息存放在Oracle内部,故连接后才能使用。如: ? conn --查询CONN命令的语法 ? c --查询以C开头的所有命令的语法 ? sqlplus --查询启动SQL Plus命令的语法 |
附录3. SQL脚本文件
- OraCreateTables.sql
--建立课程表(Course)CREATE TABLE Course (
Cno CHAR(2)
NOT NULL ,
Cname NVARCHAR2(20) ,
Cpno CHAR(2) ,
Ccredit NUMBER(2) ,
Constraint CoursePK
Primary Key (Cno)
)
/
--建立学生表(Student)
CREATE TABLE Student (
Sno CHAR(5)
NOT NULL ,
Sname NCHAR(6) ,
Ssex NCHAR(1) ,
Sage NUMBER(2) ,
Sdept NCHAR(2) ,
Constraint StudentPK
Primary Key (Sno),
Constraint SageCK
Check (Sage >=
0 AND Sage <
150)
)
/
--建立学生选课表(SC)
CREATE TABLE SC (
Sno CHAR(5)
NOT NULL ,
Cno CHAR(2)
NOT NULL ,
Grade NUMBER(3) ,
Constraint SCPK
Primary Key (Sno,Cno),
Constraint StudentFK
Foreign Key (Sno)
References Student(Sno),
Constraint CourseFK
Foreign Key (Cno)
References Course(Cno),
Constraint GradeCK
Check (Grade >=
0 AND Grade <=
100)
)
/
insert into Course
values('1','数据库原理','5',3);
insert into Course
values('2','高等数学','',4);
insert into Course
values('3','操作系统','5',4);
insert into Course
values('4','管理信息系统','1',4);
insert into Course
values('5','数据结构','7',4);
insert into Course
values('6','计算机网络','3',4);
insert into Course
values('7','C语言程序设计','',4);
insert into Course
values('8','离散数学','2',4);
insert into Student
values('95001','李胜利','男',20,'CS');
insert into Student
values('95002','张伟','男',21,'IS');
insert into Student
values('95003','刘慧敏','女',19,'CS');
insert into Student
values('95004','王强','男',22,'IS');
insert into Student
values('95005','李莉','女',20,'CS');
insert into Student
values('95006','钟晓月','女',19,'MA');
insert into SC
values('95001','1',null);
insert into SC
values('95001','3',92);
insert into SC
values('95001','5',88);
insert into SC
values('95002','1',null);
insert into SC
values('95002','3',79);
insert into SC
values('95003','1',70);
insert into SC
values('95004','1',80);
insert into SC
values('95004','5',90);
commit;
附录4. Oracle常用函数
ORACLE可以自动根据具体情况对表达式进行类型转换,如:字符串到数值、字符串到日期、数值到字符串、日期到字符串。如:select '3.14159' +
20 from dual;
--*字符串到数值
select '100' ||
124 from dual;
--*数值到字符串
请在下面例子中加以注意。
表F3-1常用数值函数
函数 | 返回值 | 样例 | 显示 |
Abs(n) | n的绝对值 | ||
Atan(n) | |||
Ceil(n) | 大于等于数值n的最小整数 | select ceil(10.6) from dual | 11 |
Floor(n) | 小于等于数值n的最大整数 | select floor(10.6) from dual | 10 |
Ln(n) | n的自然对数 | ||
Log(base, n) | 以base为底的n的对数 | ||
Mod(m,n) | M除以n的余数,若n=0,则返回m | select mod(7,5) from dual | 2 |
Power(m,n) | M的n次方 | select power(3,2) from dual | 9 |
Round(n,m) | 将n四舍五入,保留小数点后m位 | select round(1234.5678,2) from dual | 1234.57 |
Sign(n) | 若n=0,返回0;否则n>0,返回1;n<0,返回-1 | select sign(12) from dual | 1 |
Sqrt(n) | N的平方根 | select sqrt(25) from dual | 5 |
Tan(radians) |
函数 | 返回值 | 样例 | 显示 |
Ascii(c) | 返回字符的ascii码 | select ascii('赵'), ascii('a') "a" from dual; | 54740, 97 |
Chr(n) | 返回ascii码对应的字符 | select chr(54740) zhao, chr(65) chr65 from dual; | 赵, A |
Concat(c1,c2) | 连接两个字符串 | select concat('010-',88888888)||'转23' 电话 from dual; | |
Convert(char, dest_char_set, source_char_set) | 将源字符串从一个语言source字符集转换到另一个目的dest字符集 | ||
InitCap(char) | 把每个字符串的第一个字符换成大写 | Select initcap(‘mr.teplow’) from dual; | Mr.Teplow |
Length(char) | 求字符串的长度 | Select length(‘Anderson’) from dual; | 8 |
Lower(char) | 整个字符串换成小写 | Select lower('Mr.Frank Townson') from dual; | mr.frank townson |
Lpad | 在左边补齐字符 | select lpad('gao',10,'*') from dual; | *******gao |
Ltrim | 截去字符串左空/子串 | Select ltrim(' ABC '), ltrim('**AB**','*'), ltrim('ABABC*','AB') from dual; | ABC ,AB**, C*; |
Replace(char,str1,str2) | 字符串中所有str1换成str2 | Select replace('Scott','S','Boy') from dual; | Boycott |
Rpad | 在右边补齐字符 | select Rpad('gao',10,'*') from dual; | gao******* |
Rtrim | 截去字符串右空/子串 | ||
Soundex(char) | 字符串的语音表示,常用于名字的模糊查询,可查找发音相似拼写不同的字符串 | Select last_name from employee where soundex(last_name) = soundex(‘SMYTHE’) | SMITH |
Substr(char,m,n) | 取出从m字符开始的n个字符的子串 | Select substr(‘ABCDEF’,2,1) from dual; | B |
Trim | 截去字符串左、右空/子串 | ||
Upper(char) | 整个字符串换成大写 |
表F3-3
常用日期函数
函数 | 返回值 | 样例 | 显示 |
Sysdate | 当前日期和时间 | Select sysdate from dual; | 25-12月-14 |
To_date | |||
Last_day | 本月最后一天 | Select last_day(sysdate) from dual; | 31-12月-14 |
Add_months(d,n) | 当前日期d后推n个月 | Select add_months(sysdate,2) from dual; | 25-2月-15 |
Months_between(f,s) | 日期f和s间相差月数 | Select months_between(sysdate,’12-MAR-02’) from dual; | |
Next_day(d,day) | d后第一周指定的day日期 | Select next_day(sysdate,’Monday’) from dual; |
会话级:SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
数据库级:SQL> alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss';
Ø 查看默认日期、时间格式(NLS_DATE_FORMAT、NLS_TIME_FORMAT):
会话级:SQL>select * from nls_session_parameters;
实例级:SQL>select * from nls_instance_parameters;
数据库级:SQL>select * from nls_database_parameters;
表F3-4
常用日期数据格式
格式 | 返回值 | 样例 | 显示 |
Y或YY或YYY | 年的最后一位,两位或三位 | Select to_char(sysdate,’YYY’) from dual; | 002表示2002年 |
SYEAR或YEAR | 年,SYEAR使公元前的年份前加一负号 | Select to_char(sysdate,’SYEAR’) from dual; | -1112表示公元前1112年 |
Q | 季度,1到3月为第一季度 | Select to_char(sysdate,’Q’) from dual; | 2 表示第二季度 |
MM | 月份数 | Select to_char(sysdate,’MM’) from dual; | 12表示12月 |
RM | 月份的罗马表示 | Select to_char(sysdate,’RM’) from dual; | IV表示4月 |
Month | 用9个字符长度表示的月份名 | Select to_char(sysdate,’Month’) from dual; | May后跟6个空格表示5月 |
WW | 当年第几周 | Select to_char(sysdate,’WW’) from dual; | 24表示2002年6月13日为第24周 |
W | 本月第几周 | Select to_char(sysdate,’W’) from dual; | 1 2002年10月1日为第1周 |
DDD | 当年第几天,1月1日为001,2月1日为032 | Select to_char(sysdate,’DDD’) from dual; | 363 2002年12月29日为第363天 |
DD | 当月第几天 | Select to_char(sysdate,’DD’) from dual; | 04 10月4日为第4天 |
D | 周内第几天 | Select to_char(sysdate,’D’) from dual; | 5 2002年3月14日为星期一 |
DY | 周内第几天缩写 | Select to_char(sysdate,’DY’) from dual; | SUN 2002年3月24日为星期天 |
HH或HH12 | 12进制小时数 | Select to_char(sysdate,’HH’) from dual; | 02 午夜2点过8分为02 |
HH24 | 24小时制 | Select to_char(sysdate,’HH24’) from dual; | 14 下午2点08分为14 |
MI | 分钟数(0-59) | Select to_char(sysdate,’MI’) from dual; | 17 下午4点17分 |
SS | 秒数(0-59) | Select to_char(sysdate,’SS’) from dual; | 22 11点3分22秒 |
Ø To_char将任意类型的数据转换成字符类型。语句:
select to_char(8897) from dual; --返回字符串'8897';
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL;
SELECT TO_CHAR(SAL) FROM SCOTT.EMP;
SELECT TO_CHAR(122323.45, '$99999999.99') FROM DUAL;
Ø To_number将一组合法的数字字符串(如字符数据8897)转换成数值。语句select to_number(‘8897’) from dual;返回一个包括数值8897的数值类型的数据。
Ø To_date将适合格式的字符串数据转换成日期型数据。这是最容易产生错误的转换。因为12-DEC-02是合法的日期格式,语句select to_date(‘12-DEC-02’) from dual;能成功地进行数据转换。而语句select to_date(‘bad date’) from dual;,在执行时会出问题。语句select to_date(‘20021227’,’YYYYMMDD’)
from dual;将返回日期27-DEC-02因为在to_date函数中的日期格式和被转化的数据是合法的。语句select to_date(‘20021236’,’YYYYMMDD’) from dual;将失败因为在12月中没有36天。
附录5 Win7/8(64位)下PL SQL Developer(32位)的安装
PL SQL Developer(32位)的win7(64位)安装方法:安装一个32位的Oracle客户端,将Oracle服务器(64位)端的tnsnames.ora文件复制过来。工具/原料(Oracle官网上自己下载):
• Oracle 11g (64位)
• instantclient-basic-win32-11.2.0.1.0
方法/步骤:
(1)安装Oracle 11g(64位);
(2)安装32位的Oracle客户端(
instantclient-basic-win32-11.2.0.1.0);
下载instantclient-basic-win32-11.2.0.1.0.zip
(Win7 64位系统暂无PL SQL Developer,所以下一个32位的Oracle客户端),将其解压至Oracle安装目录的Product下(本机命名为:instantclient_11_2):D:\Oracle\app\Dell\product\instantclient_11_2
拷贝数据库安装根目录下的一个文件夹:D:\Oracle\app\Dell\product\11.2.0\dbhome_1
\NETWORK到Oracle客户端目录下D:\Oracle\app\Dell\product\instantclient_11_2(其实只需要
NETWORK\ADMIN\tnsnames.ora)
(3)安装PL/SQL Developer
(4)启动PL/SQL Developer
在perferenceàConnection里面设置OCI Library和Oracle_Home,例如本机设置为:
Oracle Home :D:\Oracle\app\Dell\product\instantclient_11_2
OCI Library :D:\Oracle\app\Dell\product\instantclient_11_2\oci.dll
(5)设置环境变量(修改PATH和TNS_ADMIN环境变量):
对于NLS_LANG环境变量,
最好设置成和数据库端一致,
首先从数据库端查询字符集信息:
SQL> select userenv('language') nls_lang from dual;
NLS_LANG
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
右击"我的电脑" - "属性" - "高级"
- "环境变量" - "系统环境变量":
1>.选择"Path" -
点击"编辑",
把 "D:\Oracle\app\Dell\product\instantclient_11_2;"
加入;
2>.点击"新建",
变量名设置为"TNS_ADMIN",
变量值设置为"D:\Oracle\app\Dell\product\instantclient_11_2;",
点击"确定";
3>.点击"新建",
变量名设置为"NLS_LANG",
变量值设置为"SIMPLIFIED CHINESE_CHINA.ZHS16GBK",
点击"确定";
最后点击"确定"退出.
附录6. 实验报告模板
长江大学 计算机课程实验报告课程名称 | 班级 | 实验日期 | |||
姓名 | 学号 | 实验成绩 | |||
实验名称 | (给出本次实验的题目) | ||||
实 验 目 的 及 要 求 | (给出本次实验所涉及并要求掌握的知识点) | ||||
实 验 环 境 | (列出本次实验所使用的平台和相关软件) | ||||
实 验 内 容 | (给出实验内容具体描述) | ||||
算 法 描 述 及 实 验 步 骤 | (用适当的形式表达算法设计思想与算法实现步骤) | ||||
调 试 过 程 及 实 验 结 果 | (详细记录在调试过程中出现的问题及解决方法。记录实验执行的结果) | ||||
总 结 | (对实验结果进行分析,问题回答,实验心得体会及改进意见) | ||||
附 录 | (源程序清单) |
长江大学 计算机学院
编写日期:2014-12-15
修改日期:2015-05-15
相关文章推荐
- xilinx小实验——chipscope指导
- H3CTE京东翰林讲师指导实验RIP
- Oracle9i自动分段空间管理(十分钟阅读实验)
- 5.数字图像处理及mtlab 实现-学习及实验指导 imsubtract函数
- 【原创】科研训练指导手册(DE2-115_labs_vhdl)-PART4--实验三
- 第六周实验指导--任务四--设计一个三角形类,能够输入三角形的三个顶点,求出其面积、周长。
- MIT操作系统课程CS6.828实验(2) —— 实验工具指导
- Hibernate 实验指导手册
- C语言第二次上级指导实验报告
- 【原创】科研训练指导手册(DE2-115_labs_vhdl)-PART5--实验四
- 第6周实验指导4
- 第十周实验指导--任务2--定义一个名为CPerson的类,并在此基础上派生出CEmployee类
- Java 2实用教程(第三版)实验指导与习题解答and实验模版代码及答案(一)
- 【原创】科研训练指导手册(DE2-115_labs_vhdl)-PART6--实验五
- 第十周实验指导--任务3--先建立一个Point(点)类,再派生出一个Circle(圆)类,再派生出一个Cylinder(圆柱体)类
- Java 2实用教程(第三版)实验指导与习题解答and实验模版代码及答案 (二)
- 【原创】科研训练指导手册(DE2-115_labs_vhdl)-PART7--实验六
- RPT 实验指导