搜档网
当前位置:搜档网 › ORACLE数据库操作手册

ORACLE数据库操作手册

ORACLE数据库操作手册
ORACLE数据库操作手册

ORACLE 数据库操作手册4.1

中国通信集团公司安徽有限公司

信息系统部

2010年7月

修改记录

目录

第一章数据库使用注意事项 (5)

第一章数据库使用注意事项 (5)

一、营业前台使用统一地址,后台业务严格区别业务区,不可随意访问 (5)

二、不涉及当天业务的查询和统计在BCV库中操作 (5)

三、前台营业时间禁止在生产环境进行大数据量的查询和统计操作 (5)

四、关联表均很大的查询和统计尽量用BCV库 (5)

五、按照业务规则进行DML操作,DML不要忘记执行COMMIT或ROLLBACK.. 6

六、大批量更新数据的事务分次提交 (6)

七、数据库DDL操作由数据库管理员根据业务规则进行 (6)

八、数据库使用结束及时断开连接,但也不要频繁的连接和断开 (6)

九、客户端配置与客户端第三方工具使用 (6)

十、不要使用工具进行可视化数据修改操作 (6)

十一、合理使用帐号,妥善保管密码 (6)

十二、严禁在生产库进行业务开发、调试工作 (7)

十三、单条SQL语句的长度最好不要超过1000字节 (7)

十四、数据导出导入使用expdp/impdp,不要使用exp/imp (7)

十五、PL/SQL程序应尽量符合第二章要求,注意事务的提交、回滚及异常情况处理 7十六、一定不能在循环体内部创建数据库的连接,包括通过JDBC连接数据库。 (7)

十七、SQL语句在执行前需要对语句逻辑进行检查,避免形成隐式笛卡尔积,占用大量临时表空间和降低语句效率。 (7)

第二章SQL编写注意事项 (8)

一、查看表字段名或随机少量数据时,不要使用SELECT * FROM TABLENAME (8)

二、SELECT 子句中避免使用* (8)

三、查询总记录数时,尽量不要用COUNT(*),而要指定一个有索引的字段。 (8)

四、对分区表进行查询时,尽量把分区键作为查询条件的第一个条件 (8)

五、无条件删除表中数据时,用TRUNCATE代替DELETE (8)

六、查询语句中尽量使用表的索引字段,避免做大表的全表扫描 (8)

七、带通配符(%)的LIKE语句 (9)

八、用EXISTS替代IN (9)

九、用NOT EXISTS替代NOT IN (9)

十、尽可能用UNION ALL替换UNION (10)

十一、ORDER BY语句建议 (10)

十二、避免使用NOT (10)

十三、使用DECODE函数减少处理时间 (11)

十四、删除重复记录 (11)

十五、如果可以使用WHERE条件,尽量不要在HA VING中限制数据 (11)

十六、尽量不要使数据排序 (11)

十七、避免改变索引列类型 (12)

十八、避免在索引列上使用计算 (12)

十九、避免在索引列上使用IS NULL和IS NOT NULL (12)

二十、子查询改写成表连接 (12)

二十一、使用索引的第一个列 (13)

二十二、减少对表的查询 (13)

二十三、SQL语句中:用>=替代> (13)

如果在ID列上建有索引,则语句SELECT * FROM EMPLOYEE WHERE ID >= 9 要比语句SELECT * FROM EMPLOYEE WHERE ID > 8高效。这是由于前者DBMS将直接跳到第一个ID等于9的记录而后者将首先定位到8的记录并且向前扫描到第一个DEPT 大于9的记录。 (14)

二十四、使用提示(hints) (14)

二十五、大批量数据导入 (14)

二十六、DBLINK使用 (14)

二十七、绑定变量使用建议 (15)

第三章跟踪SQL执行计划 (17)

一、相关理论 (17)

1、ORACLE优化器 (17)

2、访问TABLE的方式 (17)

3、索引访问方式 (17)

二、SET TRACE跟踪SQL执行计划 (18)

第一章数据库使用注意事项

一、营业前台使用统一地址,后台业务严格区别业务区,不可随意访问

营业网址需要通过4A系统统一使用http://10.153.176.6通过四层交换机访问,禁止访问指定的主机。后台业务(包含后台脚本及维护人员业务操作)须严格按照业务区使用中间件及数据库实例,以避免影响数据库性能。

A1:合肥、淮北

中间件:10.153.171.125 crmtux1/3(主)、10.153.171.126 crmtux1(备)

10.153.171.125 bosstux1/3(主)、10.153.171.126 bosstux1(备)

数据库:WCRMA1、WACCTA1、WRES1

A2:阜阳、宿州、亳州、池州

中间件:10.153.171.126 crmtux2/3(主)、10.153.171.125 crmtux2(备)

10.153.171.126 bosstux2/3(主)、10.153.171.125 bosstux2(备)

数据库:WCRMA2、WACCTA2、WRES2

B1:蚌埠、马鞍山、安庆、黄山、滁州

中间件:10.153.171.135 crmtux1/3(主)、10.153.171.136 crmtux1(备)

10.153.171.135 bosstux1/3(主)、10.153.171.136 bosstux1(备)

数据库:WCRMB1、WACCTB1、WRES1

B2:芜湖、淮南、铜陵、六安、宣城

中间件:10.153.171.136 crmtux2/3(主)、10.153.171.135 crmtux2(备)

10.153.171.136 bosstux2/3(主)、10.153.171.135 bosstux2(备)

数据库:WCRMB2、WACCTB2、WRES2

二、不涉及当天业务的查询和统计在BCV库中操作

BCV库每天0时同步一次(历时约1小时),数据、用户及密码与生产环境相同。BCV 库是单节点数据库,共有WCRMABCV、WCRMBBCV、WACCTABCV、WACCTBBCV和WRESBCV等五个库。BCV库的TBS_PERSON表空间是可写表空间。

三、前台营业时间禁止在生产环境进行大数据量的查询和统计操作

前台营业时间一般为8:00-18:00(高峰时间8:30-10:30、15:00-16:30),在此期间不要在生产环境做大数据量的查询和统计,每个查询的执行时间控制在1分钟内。

四、关联表均很大的查询和统计尽量用BCV库

大表关联查询操作一般会占用较大的临时表空间和较高CPU,对数据库影响较大,尤其是多个大表关联且涉及排序、分组等操作时。

五、按照业务规则进行DML操作,DML不要忘记执行COMMIT或ROLLBACK

不要只执行语句,而不控制事务。当执行一条DML语句时,数据库会分配相应锁、回滚段、REDO LOG BUFFER等资源。语句执行后应尽快的提交或回滚释放分配的资源。

六、大批量更新数据的事务分次提交

在营业忙时,大于10万的数据刷新需分次提交。大于100万的数据刷新尽量在系统空闲时进行,并分次提交,以减少异常发生。

七、数据库DDL操作由数据库管理员根据业务规则进行

DDL操作有可能涉及到存储分配、表分析、数据生命周期规划等,须数据库管理员执行,业务人员不能使用预设帐号执行DDL语句。

八、数据库使用结束及时断开连接,但也不要频繁的连接和断开

数据库连接是数据库的宝贵资源,数据库支持的连接有限,不需要使用数据库时断开连接。如果能正常退出,别用“结束任务”或kill -9。如果正在执行SQL时发生终端异常,联系数据库管理员检查处理,以防止数据库一直占用该SQL相关资源。

九、客户端配置与客户端第三方工具使用

Oracle客户端版本要求在10.2.0.4及以上,以尽量避免出现兼容性问题。第三方工具PL/SQL Developer版本应在8.0及以上,Toad for Oracle版本应在10.0及以上,DBArtisan 版本应在8.5及以上。

十、不要使用工具进行可视化数据修改操作

使用工具可视化修改数据时可能会加长数据库锁时间、增加误操作风险,因此数据修改操作须直接用SQL语句进行。

十一、合理使用帐号,妥善保管密码

个人帐号能进行的操作不要使用应用帐号执行,少量数据修改的操作应通过问题知识库对个人帐号授权后进行。帐号密码应妥善保管,不得借给他人使用,每三个月需修改一次个人帐号密码,密码应不低于8位,并含有字母、数字和特殊字符,且不能同于前五次密码。不要非法获取未经授权的系统预设(应用)帐号密码。不要使用未经授权的帐号登陆数据库。帐号被锁定时联系数据库管理员解决。

十二、严禁在生产库进行业务开发、调试工作

十三、单条SQL语句的长度最好不要超过1000字节

1000字节对应1000个英文字符或500个中文字符,需要更长语句的操作考虑使用语句段、存储过程或临时表解决。

十四、数据导出导入使用expdp/impdp,不要使用exp/imp

十五、PL/SQL程序应尽量符合第二章要求,注意事务的提交、回滚及异常情况处理

十六、一定不能在循环体内部创建数据库的连接,包括通过JDBC连接数据库。十七、SQL语句在执行前需要对语句逻辑进行检查,避免形成隐式笛卡尔积,占用大量临时表空间和降低语句效率。

第二章SQL编写注意事项

一、查看表字段名或随机少量数据时,不要使用SELECT * FROM TABLENAME

用DESC TABLENAME或SELECT * FROM TABLENAME WHERE 1 = 2、SELECT * FROM TABLENAME WHERE ROWNUM < 1等命令查看表结构信息,尽量不要直接执行SELECT * FROM TABLENAME,然后kill会话。

二、SELECT 子句中避免使用*

在SELECT子句中列出所有的列时,使用*很方便,但是效率低。因为ORACLE在解析过程中会查询数据字典,将*依次转换成所有的列名。所以,直接在SELECT子句中写出想要显示的列。

三、查询总记录数时,尽量不要用COUNT(*),而要指定一个有索引的字段。

例如主键列为INDEX,使用COUNT(INDEX)能利用索引。

四、对分区表进行查询时,尽量把分区键作为查询条件的第一个条件

五、无条件删除表中数据时,用TRUNCATE代替DELETE

使用DELETE删除表中记录未提交时,系统会用回滚段存放被删除信息。而TRUNCATE 命令不使用回滚段,当命令执行后,数据不能被恢复,因此很少的资源被调用,执行时间也会更短。

六、查询语句中尽量使用表的索引字段,避免做大表的全表扫描

例如:WHERE子句中有联接的列,即使最后的联接值为一个静态值,也不会使用索引。

SELECT *

FROM EMPLOYEE

WHERE FIRST_NAME || '' || LAST_NAME = 'Beill Cliton';

这条语句没有使用基于LAST_NAME创建的索引。当采用下面这种SQL语句的编写,ORACLE系统就可以采用基于LAST_NAME创建的索引。

SELECT *

FROM EMPLOYEE

WHERE FIRST_NAME = 'Beill'

AND LAST_NAME = 'Cliton';

七、带通配符(%)的LIKE语句

例如:SQL语句:

SELECT * FROM EMPLOYEE WHERE LAST_NAME LIKE '%cliton%';

由于通配符(%)在词首出现,所以Oracle系统不使用LAST_NAME的索引。如此使用通配符会降低查询速度。当通配符出现在字符串其他位置时,优化器就能利用索引。例如:SELECT * FROM EMPLOYEE WHERE LAST_NAME LIKE 'c%';

八、用EXISTS替代IN

在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS(或NOT EXISTS)通常将提高查询的效率。

低效:

SELECT *

FROM EMP

WHERE EMPNO > 0

AND DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE LOC = 'MELB');

高效:

SELECT *

FROM EMP

WHERE EMPNO > 0

AND EXISTS (SELECT 'X'

FROM DEPT

WHERE DEPT.DEPTNO = EMP.DEPTNO

AND LOC = 'MELB');

九、用NOT EXISTS替代NOT IN

在子查询中,NOT IN子句将执行一个内部的排序和合并。无论在哪种情况下,NOT IN都是最低效的(因为它对子查询中的表执行了一个全表遍历)。为避免使用NOT IN ,可以把它改写成外连接(Outer Joins)或NOT EXISTS。例如:

SELECT *

FROM EMP

WHERE DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPT WHERE DEPT_CAT = 'A');

为了提高效率。改写为:

(方法一:高效)

SELECT *

FROM EMP A, DEPT B

WHERE A.DEPT_NO = B.DEPT(+)

AND B.DEPT_NO IS NULL

AND B.DEPT_CAT(+) = 'A';

(方法二:最高效)

SELECT *

FROM EMP E

WHERE NOT EXISTS (SELECT 'X'

FROM DEPT D

WHERE D.DEPT_NO = E.DEPT_NO

AND DEPT_CAT = 'A');

十、尽可能用UNION ALL替换UNION

当SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION ALL的方式被合并,然后在输出最终结果前进行排序。

如果用UNION ALL替代UNION,就不需排序,提高了查询效率。例如:

低效:

SELECT ACCT_NUM, BALANCE_AMT

FROM DEBIT_TRANSACTIONS

WHERE TRAN_DATE = '31-DEC-95'

UNION

SELECT ACCT_NUM, BALANCE_AMT

FROM DEBIT_TRANSACTIONS

WHERE TRAN_DATE = '31-DEC-95';

高效:

SELECT ACCT_NUM, BALANCE_AMT

FROM DEBIT_TRANSACTIONS

WHERE TRAN_DATE = '31-DEC-95'

UNION ALL

SELECT ACCT_NUM, BALANCE_AMT

FROM DEBIT_TRANSACTIONS

WHERE TRAN_DATE = '31-DEC-95';

十一、ORDER BY语句建议

ORDER BY语句决定了ORACLE如何将返回的查询结果排序。ORDER BY语句对要排序的列没有特别限制,也可以将函数加入列中。在ORDER BY语句中使用非索引项或有计算表达式都将降低查询速度。当ORDER BY中所有的列定义为非空时会用到索引,例如:T1表的ID列存在索引,且非空。则以下查询用到索引:

SELECT * FROM T1 ORDER BY ID;

十二、避免使用NOT

在查询时经常在WHERE子句使用一些逻辑表达式,如大于、小于、等于以及不等于等等,也可以使用AND(与)、OR(或)以及NOT(非)。NOT可用来对任何逻辑运算符号取反。下面是一个NOT子句的例子:

... WHERE NOT (STATUS ='VALID')

如果要使用NOT,则应在取反的短语前面加上括号,并在短语前面加上NOT运算符。NOT 运算符包含在另外一个逻辑运算符中,这就是不等于(<>)运算符。换句话说,即使不在查询WHERE子句中显式地加入NOT词,NOT仍在运算符中,见下例:

... WHERE STATUS <>'INVALID';

再看下面这个例子:

SELECT * FROM EMPLOYEE WHERE SALARY <> 3000;

对这个查询,可以改写为不使用NOT:

SELECT * FROM EMPLOYEE WHERE SALARY < 3000 OR SALARY > 3000;

虽然这两种查询的结果一样,但是第二种查询方案会比第一种查询方案更快些。第二种查询允许ORACLE对SALARY列使用索引,而第一种查询则不能使用索引。

十三、使用DECODE函数减少处理时间

使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表。例如:SELECT COUNT(*) ,SUM(SAL)

FROM EMP

WHERE DEPT_NO = 0020

AND ENAME LIKE'SMITH%';

SELECT COUNT(*) ,SUM(SAL)

FROM EMP

WHERE DEPT_NO = 0030

AND ENAME LIKE'SMITH%';

可以用DECODE函数高效地得到相同结果

SELECT COUNT(DECODE(DEPT_NO, 0020, 'X', NULL)) D0020_COUNT,

COUNT(DECODE(DEPT_NO, 0030, 'X', NULL)) D0030_COUNT,

SUM(DECODE(DEPT_NO, 0020, SAL, NULL)) D0020_SAL,

SUM(DECODE(DEPT_NO, 0030, SAL, NULL)) D0030_SAL

FROM EMP

WHERE ENAME LIKE 'SMITH%';

类似的,DECODE函数也可以运用于GROUP BY 和ORDER BY子句中。

十四、删除重复记录

DELETE FROM EMP E

WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO);

十五、如果可以使用WHERE条件,尽量不要在HA VING中限制数据

十六、尽量不要使数据排序

带有DISTINCT、UNION、MINUS、INTERSECT、ORDER BY、GROUP BY的SQL语句会启动SQL引擎执行耗费资源的排序(SORT)功能。DISTINCT需要一次排序操作,而其他的至

少需要执行两次排序,影响查询的效率。

十七、避免改变索引列类型

当比较不同数据类型的数据时,ORACLE自动对列进行简单的类型转换。假设EMPNO是一个数值类型的索引列。

SELECT * FROM EMP WHERE EMPNO = …123?;

实际上,经过ORACLE类型转换,语句转化为:

SELECT * FROM EMP WHERE EMPNO = TO_NUMBER(…123');

但是类型转换没有发生在索引列上,索引的用途没有被改变。如果,EMP_TYPE是一个字符类型的索引列。

SELECT * FROM EMP WHERE EMP_TYPE = 123;

这个语句被ORACLE转换为:

SELECT * FROM EMP WHERE TO_NUMBER(EMP_TYPE) = 123;

因为内部发生的类型转换,索引将不会被用到。

十八、避免在索引列上使用计算

WHERE子句中,如果索引列是函数的一部分,优化器将不使用索引而使用全表扫描。例如:低效:

SELECT * FROM DEPT WHERE SAL * 12 > 25000;

高效:

SELECT * FROM DEPT WHERE SAL > 25000 / 12;

十九、避免在索引列上使用IS NULL和IS NOT NULL

避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引。对于单列索引,如果列包含空值,索引中将不存在此记录。对于复合索引,如果每个列都为空,索引中同样不存在此记录。如果至少有一个列不为空,则记录存在于索引中。例如:

如果唯一性索引建立在表的A列和B列上,并且表中存在一条记录的A,B值为(123,null) ,ORACLE将不接受下一条具有相同A,B值(123,null)的记录(插入)。然而如果所有的索引列都为空,ORACLE将认为整个键值为空,而空不等于空。因此可以无限条空记录。

因空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使ORACLE停用该索引。例如:

低效:(索引失效)

SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL;

高效:(索引有效)

SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0;

二十、子查询改写成表连接

通常来说,采用表连接的方式比子查询更有效率,但并不是所有的子查询都可以改写成表连接的形式。只有当连接字段存在唯一性时才可以进行改写。否则重复字段会产生笛卡尔积。

例如:

T1表存在以下数据:

ID ID2

1 1

2 2

2 3

T2表存在以下数据:

ID ID2

1 1

2 2

3 2

4 2

2 3

则以下查询结果不同:

子查询:

SELECT COUNT(*) FROM T1 WHERE T1.ID IN (SELECT ID FROM T2); 返回值3 表连接:

SELECT COUNT(*) FROM T1, T2 WHERE T1.ID = T2.ID; 返回值5

二十一、使用索引的第一个列

如果索引是建立在多个列上,只有在它的第一个列(leading column)被WHERE子句引用时,优化器才会选择使用该索引。

二十二、减少对表的查询

在含有子查询的SQL语句中,要特别注意减少对表的查询。例如:

低效:

SELECT TAB_NAME

FROM TABLES

WHERE TAB_NAME = (SELECT TAB_NAME FROM TAB_COLUMNS WHERE VERSION = 604)

AND DB_VER = (SELECT DB_VER FROM TAB_COLUMNS WHERE VERSION = 604);

高效:

SELECT TAB_NAME

FROM TABLES

WHERE (TAB_NAME, DB_VER) =

(SELECT TAB_NAME, DB_VER FROM TAB_COLUMNS WHERE VERSION = 604);

二十三、SQL语句中:用>=替代>

如果在ID列上建有索引,则语句SELECT * FROM EMPLOYEE WHERE ID >= 9 要比语句SELECT * FROM EMPLOYEE WHERE ID > 8高效。这是由于前者DBMS将直接跳到第一个ID 等于9的记录而后者将首先定位到8的记录并且向前扫描到第一个DEPT大于9的记录。

二十四、使用提示(hints)

在ORACLE中,是通过为语句添加hints(提示)来实现干预优化器优化的目的。hints是ORACLE提供的一种机制,用来告诉优化器按照指定方式生成执行计划。可以用hints实现:

1、使用优化器的类型;

2、基于代价优化器的优化目标,是ALL_ROWS还是FIRST_ROWS;

3、表的访问路径,是全表扫描,还是索引扫描,还是直接利用ROWID;

4、表之间的连接类型;

5、表之间的连接顺序;

6、语句的并行程度

hints只应用在它们所在SQL语句块(由SELECT、UPDA TE、DELETE关键字标识)上,对其它SQL语句或语句的其它部分没有影响。如对于使用UNION操作的2个SQL语句,如果只在一个SQL语句上有hints,则该hints不会影响另一个SQL语句。可以使用注释(COMMENT)来为一个语句添加hints,一个语句块只能有一个注释,而且注释只能放在SELECT、UPDATE、DELETE关键字的后面

使用hints的语法:

{DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */

或者

{DELETE|INSERT|SELECT|UPDATE} --+ hint [text] [hint[text]]...

注解:

1、DELETE、INSERT、SELECT和UPDATE是标识一个语句块开始的关键字,包含

提示的注释只能出现在这些关键字的后面,否则提示无效。

2、“+”号表示该注释是一个hints,该加号必须立即跟在”/*”的后面,中间不能有空格。

3、如果包含多个提示,则每个提示之间需要用一个或多个空格隔开。

4、text 是其它说明hint的注释性文本。

如果没有正确的指定hints,ORACLE将忽略该hints,并且不会给出任何错误。

二十五、大批量数据导入

大批量数据导入可能会导致UNDO表空间和REDOLOG满,对数据库的影响较大。

可以采用分批提交的方法避免UNDO表空间满的问题,REDOLOG满的问题可添加/*+ append */提示避免,示例语句如下:

ALTER TABLE TAB1 NOLOGGING;

INSERT /*+ APPEND */ INTO TAB1 SELECT * FROM TAB2;

COMMIT;

ALTER TABLE TAB1 LOGGING;

二十六、DBLINK使用

使用DBLINK进行查询,当查询包含了本地表和远端表时,ORACLE一般先把远端表的数据通过网络传送到SQL发起端,再跟本地表进行关联得到最终结果,如果远端表返回的数据较多,则会影响查询的速度。例如:

在YZDB3上执行以下语句:

SELECT *

FROM INFO.T_CI_CUSTINFO_A@YZDBBA

WHERE CUSTID IN (SELECT ATTACHCUSTID

FROM INFO.T_CI_USERINFO_E

WHERE SVCNUM = '139XXXXXXXX');

执行时间:165.078秒。若改成从A库中取数据,速度会提高很多:

SELECT *

FROM INFO.T_CI_CUSTINFO_A

WHERE CUSTID IN (SELECT ATTACHCUSTID

FROM INFO.T_CI_USERINFO_E@YZDBAB

WHERE SVCNUM = '139XXXXXXXX');

执行时间:0.297秒。或通过driving_site强制指定主驱动表,即以所指定的表为主要表,将其它表作为从表提取到驱动表所在的库进行关联运算。例如:

SELECT /*+ DRIVING_SITE(A) */ *

FROM INFO.T_CI_CUSTINFO_A@YZDBBA A

WHERE CUSTID IN (SELECT ATTACHCUSTID

FROM INFO.T_CI_USERINFO_E

WHERE SVCNUM = '139XXXXXXXX');

执行时间:0.031秒。

另外,DBLINK中应尽量避免调用远程的存储过程。

二十七、绑定变量使用建议

1、Pro*C或OCI编程使用动态SQL时,必须采用绑定变量方式,已避免引起数据库性能问题。

示例:

A、非绑定变量方式的动态SQL

//处理传入的参数,构造动态SQL语句

sprintf(sztmp1,

"SELECT \

TO_CHAR(apply_date, 'yyyymmddhh24miss'), \

state, \

FROM user_smscall \

WHERE \

(gsm_user_id = '%s' ) ",//非绑定变量方式的动态SQL语句

ora_gsm_user_id);

B、绑定变量方式的动态SQL

//处理传入的参数,构造动态SQL语句

sprintf(sztmp1,

"SELECT \

TO_CHAR(apply_date, 'yyyymmddhh24miss'), \

state, \

FROM user_smscall \

WHERE \

(gsm_user_id = :v1 ) ");//绑定变量方式的动态SQL语句

EXEC SQL PREPARE sql FROM :sqlstmt; //Prepare

//定义游标

EXEC SQL declare user_smscall_cu_1 cursor for sql;

EXEC SQL OPEN user_smscall_cu_1 USING :ora_gsm_user_id;//传变量值

2、在cursor_sharing参数均设置为similar时,绑定变量的使用时应注意以下几点:

(1)使用绑定变量,以动态SQL替代静态SQL;

(2)该对象不能进行频繁的DDL操作;

(3)相同SQL的绑定变量值的类型,类型的长度定义需要完全一致;

(4)语句中对在收集了统计信息的列进行等于操作,不会使用绑定变量;

(5)通过DBLINK操作远程的对象时:

SELECT语句必须使用绑定变量,能够避免较高的version_count;

INSERT语句降低高version_count的2种解决办法:

1)SQL语句中使用绑定变量,对于INSERT远程对象加上NOAPPEND的hint。

2)将应用程序中的INSERT INTO … TABLE@REMOTE ...SELECT....语句拆分为2条。

例如:

A、首先将SELECT的相关字段的值放入绑定变量。如:

SELECT ,...,

INTO :v_b1, ,:v_b2 ...... ,:v_bn

FROM

B、然后直接使用绑定变量的值对表进行插入操作。如:

INSERT INTO @(DBLINK)

(,,......)

VALUES (:v_b1,v_b2......,v_bn)

第三章跟踪SQL执行计划

一、相关理论

1、ORACLE优化器

1)Oracle的优化器有3种:

基于规则RULE

基于成本COST

基于选择CHOOSE

2)设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数设置,也可以在会话(session)级对其进行覆盖。

3)如果OPTIMZER_MODE=RULE,则激活基于规则的优化器(RBO)。基于规则的优化器按照一系列的语法规则来推测可能执行路径和比较可替换的执行路径。

4)如果OPTIMZER_MODE=COST,则激活基于成本的优化器(CBO)。它使用ANALYZE 语句来生成数据库对象的统计数据。这些统计数据包括表的行数、平均长度及索引中不同的关键字数等。基于这些统计数据,成本优化器可以计算出可获得的执行路径的成本。并选择具有最小的成本执行路径。在CBO模式下,需要经常运行ANALYZE 命令来确保数据的准确性。

5)如果OPTIMZER_MODE=CHOOSE,实际的优化器模式将和是否运行过analyze命令有关。如果table已经被analyze过,优化器模式将自动成为CBO,反之数据库将采用RULE 形式的优化器。

2、访问TABLE的方式

O RACLE 采用两种访问表中记录的方式:

1)全表扫描

全表扫描就是顺序地访问表中每条记录。ORACLE采用一次读入多个数据块的方式优化全表扫描。

2)ROWID定位访问

ORACLE采用索引实现了数据和存放数据的物理位置(ROWID)之间的联系。通常索引提供了快速访问ROWID的方法,因此基于索引列的查询可以得到性能上的提高。

3、索引访问方式

Oracle有两种索引访问方式

1)索引唯一扫描 ( INDEX UNIQUE SCAN)

如:表LOADING有两个索引:建立在LOADING列上的唯一性索引LOADING_PK 和建立在MANAGER列上的非唯一性索引IDX_MANAGER。

SELECT * FROM LOADING WHERE LOADING = …ROSE HILL?;

在内部,上述SQL将被分成两步执行,首先LOADING_PK索引将通过索引唯一扫描的方式被访问,获得相对应的ROWID,通过ROWID访问表的方式执行下一步检索。

如果被检索返回的列包括INDEX列中,ORACLE将不执行第二步的处理(通过ROWID 访问表)。因为检索数据保存在索引中,单单访问索引就可以完全满足查询结果。

SELECT LOADING FROM LOADING WHERE LOADING = …ROSE HILL?;

2)索引范围查询(INDEX RANGE SCAN)

适用于两种情况:

A、基于一个范围的检索

B、基于非唯一性索引的检索

例1:

SELECT LOADING FROM LOADING WHERE LOADING LIKE …M%?;

WHERE子句条件包括一系列值,ORACLE将通过索引范围查询的方式查询LODGING_PK 。由于索引范围查询将返回一组值,它的效率就要比索引唯一扫描低一些。

例2:

SELECT LOADING FROM LOADING WHERE MANAGER = …BILL GA TES?;

这个SQL的执行分两步,IDX_MANAGER的索引范围查询(得到所有符合条件记录的ROWID) 和下一步同过ROWID访问表得到LOADING列的值。由于IDX_MANAGER是一个非唯一性的索引,数据库不能对它执行索引唯一扫描。由于SQL返回LOADING列,而它并不存在于IDX_MANAGER索引中,所以在索引范围查询后会执行一个通过ROWID访问表的操作。WHERE子句中,如果索引列所对应的值的第一个字符由通配符(WILDCARD)开始,索引将不被采用。

SELECT LOADING FROM LOADING WHERE MANAGER LIKE…%HANMAN?;

在这种情况下,ORACLE将使用全表扫描。

二、SET TRACE跟踪SQL执行计划

例如:

SQL> list

1 SELECT *

2 FROM dept, emp

3* WHERE emp.deptno = dept.deptno

SQL> set autotrace traceonly

/*traceonly 可以不显示执行结果*/

SQL> /

14 rows selected.

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 NESTED LOOPS

2 1 TABLE ACCESS (FULL) OF 'EMP'

3 1 TABLE ACCESS (BY INDEX ROWID) OF 'DEPT'

4 3 INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)

Statistics

----------------------------------------------------------

0 recursive calls

2 db block gets

30 consistent gets

0 physical reads

0 redo size

2598 bytes sent via SQL*Net to client

503 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

14 rows processed

通过以上分析,可以得出实际的执行步骤是:

1、TABLE ACCESS (FULL) OF 'EMP'

2、INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)

3、TABLE ACCESS (BY INDEX ROWID) OF 'DEPT'

4、NESTED LOOPS (JOINING 1 AND 3)

注:目前许多第三方工具如TOAD、PL/SQL Developer、DBArtisan和ORACLE提供的工具如OMS的SQL Analyze都提供了极其方便的EXPLAIN PLAN工具。

oracle数据库基本命令

oracle数据库基本命令 oracle安装后 sys:超级管理员(dba),默认密码为:change_on_install system:系统管理员(dbaoper),默认密码为:manager; sys与system的不同在于sys能够create datebase而system则不能。scott:普通用户,默认密码:tiger 1.切换用户:conn 用户名/密码; SQL> conn system/manager; Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 Connected as system SQL> conn sys/change_on_install as sysdba; Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 Connected as SYS 注意:sys与其他用户在命令窗口切换时的不同。 2.修改密码:passw username;(普通用户可以修改自己密码,管理员可以修改其他人的密码) 3.显示当前用户。show user; 4.断开数据库同时推出:exit; 文件操作 5.运行sql脚本,start d:\a.sql; 6.编辑指定的sql脚本。Edit d:\a.sql; 7.将屏幕上指定的内容输出到指定文本中去。spool e:\b.sql;执行语句;spool off;

8.显示设置环境变量; 可以用来控制输出的各种格式,如果希望永久保存可以修改glogin.sql脚本。 Linesize(行宽): show linesize;显示行宽 set linesize 90;设置行宽为90个字符。 Pagesize(页面大小): Show pagesize;显示页面大小 Set pagesize 180;设置页面的小。 (做报表时可以用。一页设定几行。)

Oracle常用函数及使用案例(珍藏版)

Oracle常用函数及使用案例(珍藏版) 一:sql函数: lower(char):将字符串转化为小写的格式。 upper(char):将字符串转化为大写的格式。 length(char):返回字符串的长度。 substr(char,m,n):取字符串的字串。 案例1.将所有员工的名字按小写的方式显示 select lower(ename),sal from emp; 案例2.将所有员工的名字按大写的方式显示。 select upper(ename),sal from emp; 案例3.显示正好为五个字符的的员工的姓名。 select * from emp where length(ename)=5; 案例4.显示所有员工姓名的前三个字符。 select substr(ename,1,3) from emp;//从名字的第一个字符开始取,向后取三个字符。 案例5.以首字母为大写的方式显示所有员工的姓名。 (1)首字母大写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母小写。select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并select upper(substr(ename,1,1))||lower(substr(ename,2,length(ename)-1)) from emp; 案例6.以首字母为小写的方式显示所有员工的姓名。(需要有较高的灵活度,细心分析和清晰思路) (1)首字母小写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母大写。select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并select lower(substr(ename,1,1))||upper(substr(ename,2,length(ename)-1)) from emp; 案例7.函数(替换):replace(char1,search_string,replace_string); 显示所有员工的姓名,用“我要替换A”替代所有“A”。 select replace(ename,'A','我是老鼠')from emp; 案例8.以首字母为小写的方式显示所有员工的姓名。 select replace(ename,substr(ename,1,1),lower(substr(ename,1,1)))from emp; 案例9.以首字母为大写的方式显示所有员工的姓名。 Select replace(ename,substr(ename,2,length(ename)-1),lower(substr(ename,2,length(ename) -1)))from emp; 二:数学函数:(在财务中用的比较多) ronud(sal)用于四舍五默认取整; ronud(sal,1)用于四舍五留一位小数。 trunc(sal)取整,忽略小数。截去小数部分。 trunc(sal,1)截取;小数点留一位,之后的右边的省去。 trunc(sal,-1)截取;只留整数,个位数取零。 floor(sal)向下最接近取整;比如1.1值为1.

ORACLE数据库学习心得

ORACLE数据库结课论文 一个好的程序,必然联系着一个庞大的数据库网路... 今年我们学习了oracle数据库这门课程,起初的我,对这个字眼是要多陌生有多陌生,后来上课的时候听一会老师讲课,偶尔再跟上上机课,渐渐的学会了不少东西,但我感觉,我学到的仍是一些皮毛而已,怀着疑惑和求知的心态,我在网上搜索了关于oracle数据库的一些知识。 1.ORACLE的特点: 可移植性ORACLE采用C语言开发而成,故产品与硬件和操作系统具有很强的独立性。从大型机到微机上都可运行ORACLE的产品。可在UNIX、DOS、Windows等操作系统上运行。可兼容性由于采用了国际标准的数据查询语言SQL,与IBM的SQL/DS、DB2等均兼容。并提供读取其它数据库文件的间接方法。 可联结性对于不同通信协议,不同机型及不同操作系统组成的网络也可以运行ORAˉCLE数据库产品。 2.ORACLE的总体结构 (1)ORACLE的文件结构一个ORACLE数据库系统包括以下5类文件:ORACLE RDBMS的代码文件。 数据文件一个数据库可有一个或多个数据文件,每个数据文件可以存有一个或多个表、视图、索引等信息。 日志文件须有两个或两个以上,用来记录所有数据库的变化,

用于数据库的恢复。控制文件可以有备份,采用多个备份控制文件是为了防止控制文件的损坏。参数文件含有数据库例程起时所需的配置参数。 (2)ORACLE的内存结构一个ORACLE例程拥有一个系统全程区(SGA)和一组程序全程区(PGA)。 SGA(System Global Area)包括数据库缓冲区、日志缓冲区及共享区域。 PGA(Program Global Area)是每一个Server进程有一个。一个Server进程起动时,就为其分配一个PGA区,以存放数据及控制信息。 (3)ORACLE的进程结构ORACLE包括三类进程: ①用户进程用来执行用户应用程序的。 ②服务进程处理与之相连的一组用户进程的请求。 ③后台进程ORACLE为每一个数据库例程创建一组后台进程,它为所有的用户进程服务,其中包括: DBWR(Database Writer)进程,负责把已修改的数据块从数据库缓冲区写到数据库中。LGWR(Log Writer)进程,负责把日志从SGA中的缓冲区中写到日志文件中。 SMON(System Moniter)进程,该进程有规律地扫描SAG进程信息,注销失败的数据库例程,回收不再使用的内存空间。PMON (Process Moniter)进程,当一用户进程异常结束时,该进程负责恢复未完成的事务,注销失败的用户进程,释放用户进程占用的资源。

oracle11g数据库管理与开发第7章答案.

第7章安全管理 一、填空题 1.Oracle数据库用户口令认证可以采用数据库验证、外部验证、全局验证等几种方式。 2.Oracle数据库概要文件主要用于资源管理、控制口令等。 3.Oracle数据库中的权限分为系统权限和对象权限两种类型,向用户直接授权需要grant权限to用户SQL语句。 4.用户连接Oracle数据库后希望得到角色权限,这有两种实现方法:一种方法是让管理员把角色设置为用户默认角色,另一种方法是向用户授予角色,需调用的SQL语句是grant 角色to用户。 二、简答题 1.简要说明在oracle数据库内普通用户口令认证和管理员口令认证都有哪些方法? 答:oracle数据库普通用户口令认证有以下3种认证方法: (1)数据库认证(2)外部认证(3)全局认证 管理员口令认证有以下3种认证方法: (1)口令文件认证(2)操作系统认证(3)基于网络认证服务认证 2.简述用户通过默认角色和非默认角色获得权限有何异同? 答:用户通过默认角色获得权限时,用户默认角色在用户连接后被自动激活,所以用户不用显式启用角色就可以立即获得它们所具有的权限。而通过非默认角色获得权限时,必须通过命令调用为其授权,才能使非默认角色获权。 三、实训题 1.请创建一个用户books_pub,要求他第一次登录时必须修改口令,将其默认表空间和默认临时表空间分别设置为books_pub和temp,并在表空间users,demots和books_pub上分别为他分配10MB,10MB和50MB的存储空间。 create tablespace books_pub//创建books_pub表 datafile'f:\app\administrator\admin\orcl\hcy_1.dbf'size5M; create tablespace demots//创建demots表 datafile'f:\app\administrator\admin\orcl\hcy_2.dbf'size5M; create user books_pub//创建books_pub用户 identified by123 password expire default tablespace books_pub temporary tablespace temp quota10M on users quota10M on demots quota50M on books_pub; 2.把创建会话的系统权限,以及scott用户dept表和emp表上的所有对象授予用户books_pub。

oracle数据库操作手册

操作手册 目录 一.表空间 (4) 1.创建表空间 (4) 2.增加表空间 (4) 3.删除表空间 (5) 4.查询表空间状态 (5) 5.查询数据文件路径 (5) 6.移动表空间中数据文件的路径 (5) 7.移动表和索引到其他表空间 (6) 8.查看表空间的使用率 (7) 二.用户和权限 (9) 1.创建用户 (9) 2.修改用户的密码 (9) 3.给用户授权 (9) 4. 查询数据库系统上有多少用户,文件名和创建时间 (10) 三.归档和非归档模式 (10) 1.查看数据库的归档模式 (10) 2.修改数据库的归档模式 (10) 四.日志文件 (11) 1.查询日志文件信息 (11) 2.增加日志文件配置信息 (12) 3.增加日志成员 (12) 4.删除一组日志 (12) 五.密码文件 (13) 1.创建密码文件 (13) 六.参数文件(SPFILE PFILE) (13) 1.查看数据库使用参数文件(SPFILE 还是PFILE) (13) 2.创建SPFILE (13) 3.通过PFILE 启动数据库 (13) 七.STATSPACK (14) 1.安装STATSPACK (14) 2.数据采集 (14) 3.设置自动快照 (14) 4.设置数据采集的时间 (14) 八.ORACLE信息查询 (15) 1.查询ORACLE数据库的名字,创建日期 (15) 2. 查询ORACLE所在操作系统的主机名,实例名,版本 (15) 3.查询ORACLE数据库系统版本详细信息 (15) 九.控制文件 (16) 1.查询控制文件 (16) 2.备份控制文件 (16)

十.索引 (16) 1.创建普通索引 (16) 2.创建位图索引 (16) 3.查询索引所在的表,表空间,索引类型 (16) 4.查询索引所在的列 (17) 十一.主键 (17) 1.定义主键 (17) 2.查询主键索引 (18) 3.查询约束信息 (18) 4.禁止约束 (18) 5.开启主键 (19) 十二.手工建库脚本 (19) 十三..PROFILE文件内容 (19) 十四.做定时JOB (20) 1.创建存储过程,为此存储过程作定时JOB (20) 2.定时JOB 的参数说明 (21) 十五.查询出SQL语句 (22) 1.通过SID 找出HASH VALUE 值 (22) 2.通过HASH VALUE 值查询出SQL 语句 (22) 3.根据HASH VALUE 值查询出对应的 SESSLIN SID (22) 4.根据HASH VALUE 找出对应的机器名称 (22) 5.通过HASH VALUE 查询出该语句的执行计划 (23) 6.查询存储过程 (23) 7.查询对象属于哪个用户 (23) 8.查询表的分析时间 (23) 9.查询对象(表)的类型 (23) 十六.查询脚本 (24) 1.查询等待事件 (24) 2.查询大表已经索引超过2G 的对象 (24) 3.查看锁 (25) 十七.基本的SQL语句 (25) 1.对表的操作 (25) 2.常用的函数 (26) 十八.安装手册 (27) 十九.错误总结 (27) 1. ORA-00257: 归档程序错误 (27) 二十.故障处理 (29) 1.日志挖掘 (29) 2.行链接行迁移 (30) 3.逻辑备份(exp/imp) (35) 4.关闭和启动数据库的步骤 (36) 二十一.METALINK操作 (37) 1.开二级别SR (37) 2.OPATCH 下载地址 (37)

Oracle数据库基本知识点

1、数据库基本语句 (1)表结构处理 创建一个表:cteate table 表名(列1 类型,列2 类型); 修改表的名字 alter table 旧表名 rename to 新表名 查看表结构 desc 表名(cmd) 添加一个字段 alter table 表名 add(列类型); 修改字段类型 alter table 表名 modify(列类型); 删除一个字段 alter table 表名 drop column列名; 删除表 drop table 表名 修改列名 alter table 表名 rename column 旧列名 to 新列名; (2)表数据处理 增加数据:insert into 表名 values(所有列的值); insert into 表名(列)values(对应的值); 更新语句:update 表 set 列=新的值,…[where 条件] 删除数据:delete from 表名 where 条件 删除所有数据,不会影响表结构,不会记录日志, 数据不能恢复--》删除很快: truncate table 表名 删除所有数据,包括表结构一并删除: drop table 表名 去除重复的显示:select distinct 列 from 表名 日期类型:to_date(字符串1,字符串2)字符串1是日期的字 符串,字符串2是格式 to_date('1990-1-1','yyyy-mm-dd')-->返回日期的 类型是1990-1-1 (3)查询语句 1)内连接 select a.*,b.* from a inner join b on a.id=b.parent_id

Oracle数据库基础题库【含答案】

1、判断题,正确请写写"T",错误请写写"F", 1、oracle数据库系统中,启动数据库的第一步是启动一个数据库实例。( T ) 2、Oracle服务器端的监听程序是驻留在服务器上的单独进程,专门负责响应客户机的连接请求。( F) 3、oracle数据库中实例和数据库是一一对应的(非ORACLE并行服务,非集群)。( T) 4、系统全局区SGA 是针对某一服务器进程而保留的内存区域,它是不可以共享的。( F ) 5、数据库字典视图ALL_***视图只包含当前用户拥有的数据库对象信息。( F ) 8、数据字典中的内容都被保存在SYSTEM表空间中。( T ) 9、HAVING后面的条件中可以有聚集函数,比如SUM(),AVG()等, WHERE 后面的条件中也可以有聚集函数。( F ) 10、"上海西北京" 可以通过like ‘%上海_’查出来。( F ) 11、表空间是oracle 最大的逻辑组成部分。Oracle数据库由一个或多个表空间组成。一个表空间由一个或多个数据文件组成,但一个数据文件只能属于一个表空间。( T ) 12、表空间分为永久表空间和临时表空间两种类型。( T ) 13、truncate是DDL操作,不能 rollback。( T ) 14、如果需要向表中插入一批已经存在的数据,可以在INSERT语句中使用WHERE语句。( F ) 15、Oracle数据库中字符串和日期必须使用双引号标识。( F ) 16、Oracle数据库中字符串数据是区分大小写的。( T ) 17、Oracle数据库中可以对约束进行禁用,禁用约束可以在执行一些特殊操作时候保证操作能正常进行。( F ) 18、为了节省存储空间,定义表时应该将可能包含NULL值的字段放在字段列表的末尾。( T ) 20、在连接操作中,如果左表和右表中不满足连接条件的数据都出现在结果中,那么这种连接是全外连接。( T ) 21、自然连接是根据两个表中同名的列而进行连接的,当列不同名时,自然连接将失去意义。( T ) 23、PL/SQL代码块声明区可有可无。( T ) 24、隐式游标与显式游标的不同在于显式游标仅仅访问一行,隐式的可以访问多行。( F )

oracle常用命令大全和环境变量路径

Oracle 命令大全 底部为环境变量配置路径。 1 运行SQLPLUS工具 sqlplus 2 以OS的默认身份连接 / as sysdba 3 显示当前用户名 show user 4 直接进入SQLPLUS命令提示符 sqlplus /nolog 5 在命令提示符以OS身份连接 connect / as sysdba 6 以SYSTEM的身份连接 connect system/xxxxxxx@服务名 7 显示当然用户有哪些表 select * from tab; 8 显示有用户名和帐户的状态 select username,account_status from dba_users; 9 将SCOTT帐号解锁(加锁) alter user scott account unlock(lock); 10 以SCOTT的身份连接并且查看所属表 connect scott/tiger select * from tab; 11 查看EMP的表结构及记录内容 desc emp select empno,ename from emp; 12 以OS的身份登看SGA,共享池,CACHE的信息 connect / as sysdba show sga select name,value/1024/1024 from v$sga; show parameter shared_pool_size select value/1024/1024 from v$parameter where name ='shared_pool_size';

show parameter db_cache_size select value/1024/1024 from v$parameter where name ='db_cache_size'; 13 查看所有含有SIZE的信息 show parameter size bitmap_merge_area_size integer 1048576 create_bitmap_area_size integer 8388608 db_16k_cache_size big integer 0 db_2k_cache_size big integer 0 db_32k_cache_size big integer 0 db_4k_cache_size big integer 0 db_8k_cache_size big integer 0 db_block_size integer 4096 db_cache_size big integer 33554432 db_keep_cache_size big integer 0 db_recycle_cache_size big integer 0 NAME TYPE V ALUE ------------------------------------ ----------- ------------- global_context_pool_size string hash_area_size integer 1048576 java_max_sessionspace_size integer 0 java_pool_size big integer 33554432 large_pool_size big integer 8388608 max_dump_file_size string UNLIMITED object_cache_max_size_percent integer 10 object_cache_optimal_size integer 102400 olap_page_pool_size integer 33554432 oracle_trace_collection_size integer 5242880 parallel_execution_message_size integer 2148 NAME TYPE V ALUE ------------------------------------ ----------- ------------- sga_max_size big integer 143727516 shared_pool_reserved_size big integer 2516582 shared_pool_size big integer 50331648 sort_area_retained_size integer 0 sort_area_size integer 524288 workarea_size_policy string AUTO 14 显示SGA的信息 select * from v$sgastat; POOL NAME BYTES

Oracle数据库期末复习知识点整理

基础知识 表3.2 Oracle数据类型

表3.3 XSB的表结构

操作表 创建表 CREATE TABLE [schema.] table_name ( column_namedatatype [DEFAULT expression] [column_constraint][,…n] [,…n] ) [PCTFREE integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace_name] [STORGE storage_clause] [CLUSTER cluster_name(cluster_column,…n)] [ENABLE | DISABLE ] [AS subquery] 【例】使用CRETE TABLE命令为XSCJ数据库建立表XSB,表结构参照表3.3。 打开SQL*Plus工具,以system方案连接数据库,输入以下语句: CREATE TABLE XSB ( XH char(6) NOT NULL PRIMARY KEY, XM char(8) NOT NULL, XB char(2) DEFAULT '1' NOT NULL, CSSJ date NOT NULL, ZY char(12) NULL, ZXF number(2) NULL, BZ varchar2(200) NULL ); 修改表 ALTER TABLE [schema.] table_name [ ADD(column_namedatatype [DEFAULT expression][column_constraint],…n) ] /*增加新列*/ [ MODIFY([ datatype ] [ DEFAULT expression ] [column_constraint],…n) ] /*修改已有列的属性*/ [ STORAGE storage_clause ] *修改存储特征*/ [ DROP drop_clause ] /*删除列或约束条件*/ 【例】使用ALTER TABLE语句修改XSCJ数据库中的表。

Oracle数据库技术课程学习大纲详细

《现代数据库技术》教学大纲 课程名称:《现代数据库技术》 课程编号:学时数:56 学分数:3.5 适应专业:计算机与信息学院所有专业 一、本课程的地位、任务和作用 现代数据库技术是计算机在数据处理应用领域中的主要内容和坚实基础;也是今后若干年内研究和应用的最活跃的分支之一。因此,信息管理、软件开发、计算机等专业的学生,特别是以应用为目标的学生都必须学习和具备数据库原理与应用的知识。本课程通过介绍Oracle数据库基本操作、体系结构与数据库基本管理使学生初步掌握大型数据库的基本原理,了解大型数据库的管理方法。了解大型数据库的管理方法,使学生熟练掌握Oracle数据库系统下的SQL语言运用及PL/SQL程序设计。 本课程是一门理论和实践相结合的课程,要求学生在完成本课程的学习以后,能够结合自己所熟悉的某一门高级语言和Oracle,开发出一个小型的数据库应用系统。 二、本课程的相关课程 本课程的先修课程为《计算机组成原理》,《离散数学》,《数据结构》,《计算机网络》及《数据库原理》等课程。 三、本课程的基本内容及要求 教学内容: 第一章数据库概述(2学时) 1、教学内容: 1.1数据库基础知识 1.2关系数据库系统 1.3 Oracle基础知识 (1)Oracle的发展历史 (2)Oracle的特点 第二章O racle体系结构(6学时) 1、教学内容: 2.1 Oracle 体系结构概述 2.2Oracle的存储结构 (1)物理存储结构 (2)逻辑存储结构 2.3Oracle的实例 (1)Oracle内存结构

(2)Oracle进程 2.4数据字典 2、教学重点:Oracle的物理结构、oracle实例、Oracle的逻辑结构 3、教学难点:数据库实例与进程 第三章O racle11g的安装(2学时) 1、教学内容: 3.1 Oracle 11g环境介绍 3.2Oracle 11g for Windows的安装 (1)安装Oracle 11g服务器 (2)Oracle 11g与Windows (3)安装Oracle 11g客户端 3.3 Oracle 11g 的卸载 2、教学重点:学会Oracle的安装 第四章O RACLE数据库管理工具及网络配置(2学时) 1、教学内容: 4.1 SQL*Plus命令 (1)设置SQL*Plus 运行环境 (2)常用SQL*Plus命令 (3)格式化查询结果 4.2 Oracle企业管理器 4.3 数据库配置助手 4.4 启动与关闭oracle实例 2、教学重点:学会使用SQL*Plus 第五章S QL语言基础(5学时) 1、教学内容: 5.1SQL简介 5.2SQL的基本语法 5.3数据查询语言 5.4数据操纵语言 5.5数据定义语言 5.6数据控制语言 5.7常用函数 5.8 事务处理 2、教学重点:数据查询语言、数据操纵语言、数据定义语言、数据控 制语言 3、教学难点:SQL的基本语法 第六章P L/SQL编程(8学时)(课本第6,7章) 1、教学内容: 6.1PL/SQL基础 (1)变量及声明 (2)数据类型 (3)表达式 (4)PL/SQL程序块结构 6.2PL/SQL控制结构

Oracle查询语句基本命令一

oracle查询语句大全--基本命令大全一 1.create user username identified by password;//建用户名和密码oracle ,oracle 2.grant connect,resource,dba to username;//授权grant connect,resource,dba,sysdba to username; 3.connect username/password//进入。 4.select table_name,column_name from user_tab_columns where table_name='mview_log';//查询表中的表名,字段名等等。 5. 如何执行脚本SQL文件? SQL>@PATH/filename.sql; 6.Oracle oledb 提供者在command中执行多条SQL语句与SQL SERVER有少许差别,SQL Server只需使用";"分割多条SQL语句,而Oracle需要遵守ORACLE调用规范,即除分号分割外,还需以begin /end;包围语句体. 使用C#描述应如下所示: https://www.sodocs.net/doc/5d4808422.html,mandText = "begin INSERT INTO GROUP_INFO (GROUP_ID, GROUP_NAME) V ALUES (1, \'2\'); INSERT INTO GROUP_INFO(GROUP_ID, GROUP_NAME) V ALUES (2, \'2\'); end;"; 7.查询用户下的表的信息select distinct table_name from user_tab_columns; 8.如何搜索出前N条记录?Select a.*,rownum from (select * from cardkind order by cardkind ) a where rownum show user 3、查看系统拥有哪些用户SQL> select * from all_users; 4、新建用户并授权 SQL> create user a identified by a;(默认建在SYSTEM表空间下) SQL> grant connect,resource to a; 5、连接到新用户SQL> conn a/a

Oracle数据库开发规范

项目编号:××× xxx Oracle数据库开发规范 Oracle DB Development Standardization <部门名称> **年**月**日 文档信息: 文档名称: 文档编号: 文档版本日期: 起草人: 起草日期: 复审人: 复审日期: 版本历史: 版本 日期 作者 更改参考 说明

审批信息: 签字/日期 审核 审批 目录 1 概述 4 1.1 编写目的 4 1.2 文档约定 4 1.3 预期的读者和阅读建议 4 1.4 参考文献 5 2 数据库对象命名 6 2.1 命名总体原则 6 2.2 表名 6 2.3 视图 6 2.4 同义词 6 2.5 序列7 2.6 索引7 2.7 存储过程7 2.8 存储函数8 2.9 存储程序包8 2.10 触发器8 2.11 字段8 2.12 其他9 3 设计规范9 3.1 范围9 3.2 表空间9 3.3 字符集10 3.4 主外键约束10 3.5 分区表10 3.6 RAC下的序列设计10 3.7 字段10 3.8 表结构设计11 3.9 索引设计11 3.10 临时表11 4 SQL编写规范 12 4.1 书写规范12 4.2 SQL语句的索引使用13 4.3 SQL语句降低系统负荷 15 5 PL/SQL编程规范18

5.1 书写规范18 5.2 常用数据库操作语句编码规范19 5.3 常用过程控制结构20 5.4 Condition 21 5.5 Cursor 22 5.6 变量定义与赋值22 5.7 过程与函数调用23 5.8 例外处理(Exception) 23 5.9 例外处理的错误消息24 5.10 注释(Comment) 25 5.11 应用调试控制27 5.12 并发控制27 5.13 代码测试、维护29 1 概述 1.1 编写目的 为规范软件开发人员的Oracle数据库开发提供参考依据和统一标准。 1.2 文档约定 说明本文档中所用到的专用术语定义或解释,缩略词定义。 1.3 预期的读者和阅读建议 本文档适用于所有开发员。 1.4 参考文献 列出有关的参考文件,如: a.属于本项目的其他已发表文件; b.本文件中各处引用的文档资料。 列出这些文件的标题、作者,说明能够得到这些文件资料的来源。 2 数据库对象命名 2.1 命名总体原则 本规范所涉及数据库对象主要是指表、视图、同义词、索引、序列、存储过程、函数、触发器等; 命名应使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,中间以下划线分割;避免使用Oracle的保留字或关键字,如LEVEL和TYPE; 各表之间相关列名尽量同名; 除数据库模式对象名称长度为1-8个字符,其余对象名称均要求不超过30个字符; 命名只能使用大写英文字母,数字和下划线,且以英文字母开头。 2.2 表名 规则:XXX_MMM_DDDD 说明:XXX代表子系统或模块名称(2-3个字母构成); MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有); DDDD为表的简称含义,使用英文单词或词组构成,可包括下划线,但不得使用汉语拼音。 示例:PO_HEADERS_ALL 2.3 视图 规则:XXX_MMM_DDDD_V 说明:XXX代表子系统或模块名称(2-3个字母构成);

ORACLE数据库基础测试题oracle数据库复习题

ORACLE数据库基础测试题 提示:本题为ORACLE数据库基础测试题,适合初学者对基础知识进行测试,以便查漏补缺。 1、 DDL指得就是:()。 A、数据定义语言 B、数据操作语言 C、数据查询语言 D、数据控制语言 正确答案:A解析: 2、 下列创建表语句正确得就是:(). A、create table emp(id number(4),); B、createtable emp(id number(4)); C、alter table emp(id number(4)) ; D、alter tableemp(id number(4),) ;

正确答案:B解析: 3、 下列Oracle函数中能够返回两个字符串连接后得结果得就是:()。 A、initcap B、instr C、trim D、concat 正确答案:D解析: 4、 下列SQL语句得查询结果就是:()。selectround(45、925,0),trunc(45、925)fromdual; A、4545 B、4645 C、4546 D、46 46 正确答案:B解析:

5、 关于函数nvl(d1,d2)得用法说法正确得就是:()。 A、表示如果d1为null则d2必须为null B、表示如果d1为null则忽略d2 C、表示如果d1不为null则用d2替代 D、表示如果d1为null则用d2替代 正确答案:D解析: 6、 显示emp表得所有行,所有列,下列SQL语句正确得就是:()。 A、select*fromemp; B、select all、*from emp; C、selectallfromemp; D、select/* from emp; 正确答案:A解析: 7、 查询职员得姓名及其直接领导,如果没有直接领导得职员,则显示为“NoManager",下列SQL语句正确得就是:()。

Oracle常用数据字典的查询使用方法

查看当前用户的缺省表空间 1. SQL>select username,default_tablespace from user_users; 查看当前用户的角色 1. SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 1. SQL>select * from user_sys_privs; 2. SQL>select * from user_tab_privs; 查看用户下所有的表 1. SQL>select * from user_tables; 显示用户信息(所属表空间) 1. select default_tablespace,temporary_tablespace 2. from dba_users where username='GAME'; 1、用户 查看当前用户的缺省表空间 1. SQL>select username,default_tablespace from user_users; 查看当前用户的角色 1. SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 1. SQL>select * from user_sys_privs;

2. SQL>select * from user_tab_privs; 显示当前会话所具有的权限 1. SQL>select * from session_privs; 显示指定用户所具有的系统权限 1. SQL>select * from dba_sys_privs where grantee='GAME'; 显示特权用户 1. select * from v$pwfile_users; 显示用户信息(所属表空间) 1. select default_tablespace,temporary_tablespace 2. from dba_users where username='GAME'; 显示用户的PROFILE 1. select profile from dba_users where username='GAME'; 2、表 查看用户下所有的表 1. SQL>select * from user_tables; 查看名称包含log字符的表 1. SQL>select object_name,object_id from user_objects

北语20秋《Oracle数据库开发》作业1【标准答案】

20秋《Oracle数据库开发》作业1 试卷总分:100 得分:100 一、单选题 (共 9 道试题,共 36 分) 1.Orcacle提供了(),用于支持采用向导方式创建数据库。 A.SQL*Plus B.Oracle Net C.Oracle Listner D.Oracle Database Configuration Assistant。 答案:D 2.可以自动执行操作的存储对象是() A.程序包。 B.函数。 C.过程。 D.触发器 答案:D 3.在Oracle中,约束可以在DML语句执行之后立即生效,也可以延迟到事务处理提交时才生效。()语句可以让用户在事务处理中设置延迟约束的强制模式 A.set constraint B.set transaction C.take constraint D.take constraint 答案:A 4.Oracle的分区表可以包括多个分区,每个分区都是一个独立的(),可以存放到不同的表空间中。 A.段。 B.盘区。 C.物化视图。 D.数据文件 答案:A 5.初始化参数()指定了实例启动时希望创建的共享服务器进程的数目 A.SHARED_SERVICES。 B.DISPATCHERS。 C.HOST。 https://www.sodocs.net/doc/5d4808422.html,_SERVICES 答案:A 6.假设需要格式化作者表AUTHOR查询的列信息,将AUTHOR_ID列名字格式化为“作者编号”,AUTHOR_ID列名字格式化为“作者名称”,AUTHOR_DESC列名字格式化为“作者简介”,可以使用如下()方式 A.FORMAT AUTHOR_ID HEADING ’作者编号’FORMAT AUTHOR_NAME HEADING ’作者名称’FORMAT

Oracle数据库知识总结

AD1. 执行一个SQL脚本文件 SQL>start file_name SQL>@ file_name 我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。 4. 将显示的内容输出到指定文件 SQL> SPOOL file_name 在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。 5. 关闭spool输出 SQL> SPOOL OFF 只有关闭spool输出,才会在输出文件中看到输出的内容。 7. COL命令: 主要格式化列的显示形式。 1). 改变缺省的列标题 COLUMN column_name HEADING column_heading For example: Sql>select * from dept; DEPTNO DNAME LOC ---------- ---------------------------- --------- 10 ACCOUNTING NEW YORK sql>col LOC heading location sql>select * from dept; DEPTNO DNAME location --------- ---------------------------- ----------- 10 ACCOUNTING NEW YORK 2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上: Sql>select * from emp Department name Salary ---------- ---------- ---------- 10 aaa 11 SQL> COLUMN ENAME HEADING ’Employee|Name’ Sql>select * from emp Employee Department name Salary ---------- ---------- ---------- 10 aaa 11 note: the col heading turn into two lines from one line. 3). 改变列的显示长度: FOR[MAT] format Sql>select empno,ename,job from emp; EMPNO ENAME JOB ---------- ---------- --------- 7369 SMITH CLERK

相关主题