关于索引取出数据的时间的测试
Tom说 ”从1000行的索引返回数据所用的时间与从一个100000行的索引结构中返回数据的时间是一样的。” 做一个测试吧……[@more@]SQL> create table test1 as select * from dba_objects; 表已创建。 SQL> insert into test1 select * from test1; 已创建68589行。 SQL> insert into test1 select * from test1; 已创建137178行。 SQL> insert into test1 select * from test1; 已创建274356行。 SQL> commit; 提交完成。 SQL>
关于HWM,delete与truncate
测试一我们建立一个表test1并向表中插入数据使表有一定的大小。SQL> create table test1 as select * from dba_objects;表已创建。SQL> insert into test1 select * from test1;已创建68624行。SQL> insert into test1 select * from test1;已创建137248行。SQL> insert into test1 select * from test1;已创建274496行。[@more@] SQL> commit;提交完成。我们查看下test1这个表占用的空间SQL> col tablename format a10SQL> select owner,segment_name tablename , bytes/1024/1024 from dba_segments where segm
连接≠会话 autotrace的‘秘密’
我们经常使用autotrace功能以查看SQL的执行计划,熟不知当我们开启autotrace功能时也开启了另一个session。 例1 我们以SYS用户登录并查看当前的session信息 [@more@] SQL> col username format a10 SQL> select username,sid,serial#,server,paddr,status from v$session where username='SYS'; USERNAME SID SERIAL# SERVER PADDR STATUS ---------- ---------- ---------- --------- -------- -------- SYS 170 5 DEDICATED 28691750 ACTIVE 我们
关于位图索引(bitmap index)
在传统的索引中采用的是一对一的对应关系,即一个索引条目就指向一行,二对于位图索引,一个索引条目则使用一个位图同时指向多行。位图索引适用于高度重复而且通常制度的数据,例如在一个上百万行的表中,某列的值仅仅只有几个值,比如Manager,Assistant,Engineer,Officer。你要频繁的统计有多少个officer,那么这样的情况就适合建立位图索引。但是在OLTP环境中则不适合建立位图索引。举一个简单的例子: ...[@more@]我们建立一个表tb1,包含2个字段dept和name。 SQL> create table tb1(dept varchar(10), name varchar(10));表已创
让所有用户均可查看<执行计划>
我们都知道 autotrace工具是可以显示所执行查询的解析计划(explain plan)以及所用的资源。我们先说一下autotrace的选项SET AUTOTRACE OFF --------------- 不生成AUTOTRACE 报告,这是缺省模式SET AUTOTRACE ON ---------------- 显示查询结果、执行计划和统计信息[@more@]SET AUTOTRACE ON EXPLAIN ------ 显示查询结果 及 执行计划 SET AUTOTRACE ON STATISTICS ---显示查询结果 及 统计信息 SET AUTOTRACE TRACEONLY -------不显示查询结果,仅显示执行计划及统计信息SET AUTOTRACE TRACE STAT -------不显示查询结果,仅显示统计信息
物化视图
Oracle的物化视图提供了强大的功能,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能;物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。create materialized view [view_name]refresh [fast|complete|force][on [commit|demand] |start with (start_time) next (next_ti
数据文件?还是快捷方式?
使数据文件在不同目录,将数据文件的快捷方式存放在同一目录。指定数据文件的位置为数据文件快捷方式,这样是否可行呢?需在数据库处于mount状态或表空间offline状态使用语句alter tablesapce tbsp_name rename datafile '原目录' to '目标目录'测试1:UNIX环境SQL>create tablespace test datafile '/home/oracle/test' size 10mTablespace created.[oracle@localhost ~]$ ln -s /home/oracle/test /data/oracle/oradata/orcl/test[oracle@localhost ~]$ ll /data/oracle/oradata/orcl/total 1058244 ...[@more@]-rw-r----- 1 oracle
Constraint 主键
建立主键时忘记给主键起名字alter table test add primary key(id)--建立有名称的主键alter table test add constraint pk_id primary key(id)而后想删除主键,alter table test drop constraint PK_name却不知道主键名称。查询表中的主键select * from user_constraints where table_name='test'其中Contraints_type列内容解析如下...[@more@]sDBA_constraints.CONSTRAINT_TYPE/User_Constraints:C: Check ,On TableO: Read Only, On ViewP: Primary Key R: FK(Foreign Key, Referential Integrity)U: Unique KeyV: Check Option,
Orapwd
口令文件一般存放在dbs(unix/linux)或者database(win)目录下,叫做pwdsid.ora口令文件用于记录拥有sysdba/sysoper权限的用户名和密码创建语法:orapwd file=pwdsid.ora password=mima entries=10 (UNIX下没有.ora后缀)察看口令文件内容的方法:select * from v$pwfile_users;show parameter remote_login_passwordfile设定为EXCLUSIVE,则一个实例专用;SHARE则可以多个实例共享(用于OPS/RAC环境);NONE则不启用口令文件,此时任何sysdba/sysoper都无法连接进来。alter system set remote_login_passwordfile=none scope=spfilesqln
EM——备份
环境:windows+oracle10g使用EM备份数据库->维护->调度备份设置备份策略与目标后 输入主机身份证明:用户名,密码出现如下错误....[@more@]错误 - 以用户 liuxin 的身份连接 主机 失败: ERROR: Wrong password for user--===解决方案如下控制面板->管理工具->本地安全策略->作为批处理作业登陆 在这里添加要执行备份操作的用户再次测试备份 通过验证
ORACLE GLOBAL
区别nls_database_parameters与v$nls_parameters实验1:(测试于PL/SQL Develper)先看看v$nls_parameters....[@more@]select * from v$nls_parameters1 NLS_LANGUAGE SIMPLIFIED CHINESE2 NLS_TERRITORY CHINA3 NLS_CURRENCY ¥4 NLS_ISO_CURRENCY CHINA5 NLS_NUMERIC_CHARACTERS .,6 NLS_CALENDAR GREGORIAN7 NLS_DATE_FORMAT DD-MON-RR8 NLS_DATE_LANGUAGE SIMPLIFIED CHINESE9 NLS_CHARACTERSET ZHS16GBK10 NLS_SORT BINARY11 NLS_TIME_FORMAT HH.MI.SSXFF AM12 NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM13 NLS_TIME_TZ_FORMAT HH
Questions——无法shutdown
当shutdown immediate是出现如下情况SQL> shutdown immediate_ 无法关闭数据库,等待许久仍然无法关闭可以选择如下办法:另开一个窗口[@more@]C:>sqlplus / as sysdbaSQL*Plus: Release 10.1.0.2.0 - Production on 星期二 9月 8 07:48:18Copyright (c) 1982, 2004, Oracle. All rights reserved.已连接。SQL> shutdown abortORACLE 例程已经关闭。SQL>再返回刚才的窗口 已经变化:SQL> shutdown immediateORA-03113: 通信通道的文件结束--==至此已经关闭数据库 由于shutdown abort数据库 重新开启数据库时会自动进行实例
Questions——无法启动EM
很久不用EM 后来同学在学习ORACLE的时候问我关于在EM中备份数据库的问题 于是想自己试验一下 可发现服务完全无法启动 后来想起来曾经修改过计算机名 可能是这个导致了EM无法启动 --===解决问题:重新配置服务...[@more@]c:>emca EMCA 开始于 Tue Sep 08 07:34:34 CST 2009输入以下有关要配置的数据库的信息监听程序端口号: 1521数据库 SID: orcl服务名: orcl通知的电子邮件地址:通知的电子邮件网关:dbsnmp 口令:sysman 口令:sys 口令:-----------------------------------------------------------------已指定以下设置数据库 ORACLE_
Questions——无法以OS认证方式登录
环境:windows +oracle10g 问题:无法以OS验证方式登录 朋友在学习ORACLE时问我的一个问题,他的操作系统是windows,切换用户后使用语句...[@more@]sqlplus / as sysdba 无法登入数据库 但以sqlplus sys/system as sysdba 却可以正常登入这里第一条sqlplus / as sysdba 使用的是OS验证 默认登入数据库用户SYS 第二条语句已经验证以SYS用户可以登入数据库 所以可以断定是操作系统验证问题 --=== 解决问题 控制面板->管理工具->计算机管理->ORA_DBA 在打开的对话框中加入当前操作系统用户 再次验证可以登录--==== 默认启用OS认证的方
Questions——无法删除SYS用户下表的列
朋友刚开始学习ORACLE 做练习的时候 以SYS用户创建了一个表 并插入了数据 之后想要修改表结构 删除其中一列 结果提示 无法删除属于 SYS 的表中的列...[@more@]这个问题我也做了如下实验---------------------------------------------C:>sqlplus / as sysdbaSQL*Plus: Release 10.1.0.2.0 - ProductiCopyright (c) 1982, 2004, Oracle. All连接到:Oracle Database 10g Enterprise EditionWith the Partitioning, OLAP and Data MiSQL> create table abc (a int,b int);表已创建。SQL> insert into abc values(1,10);已创建 1 行。
基础开始——undo
undo 使用DML语句对数据进行了修改 oracle将修改前的数据保存至undo segment中 ,undo segment保存于undo tablespace中,未使用commit提交事务前 使用rollback可回滚这部分数据 show parameter undoundo参数...[@more@]①undo_management 值为auto时 在空间不足时自动创建undo段②undo_retention 该项值为在事务提交后存放在undo段内的数据仍将保存多少秒③undo_tablespace 当前使用的undo表空间ORA-01555 快照过旧 解决方案:扩大undo表空间1.create undo tablespace undotbs2 datafile ' g:/undotbs2.dbf ' size 10m创建一个undo表空间
基础开始——数据库运行模式 专用&共享
数据库运行模式 专用服务器模式 共享服务器模式...[@more@]专用服务器模式每个session都有一个专用的进程为其服务 多用于只有少数客户端连接服务器 或OLTP(联机事务处理系统)专用服务器使用的游标、用户信息、栈空间都来自于PGA共享服务器模式也叫做多线程服务器模式 多个用户进程使用同一个服务器进程 进入队列处理 多用于多客户连接服务器共享服务器使用的游标、用户信息 内存来自于SGA(内的大池) 栈则在PGA中①select * from v$queue查看队列②select * from v$circuit查看哪些进程在服务③select * from v#shared_server_monitor查
基础开始——审计aduit
审计 audit用于记录用户对数据库的操作语句审计(statement audit)、权限审计(privilege audit)、对象审计(object audit)[@more@]审计的参数show parameter audit ①audit_trail = os / db /noneos:审计记录存于操作系统中db:审计记录存于数据库的相关表中 none: 不做审计②audit_sys_operations = true / false(默认)当为true时,sys用户的操作将被记录,windowns平台记录于事件管理中,linux / unix平台记录与audit_file_dest参数指定的文件中1.select * from aud$查询审计内容 包括审计sid 审计用户 动作号 时间等信息2.select
基础开始——pl/sql
pl/sql 对SQL(结构化查询语言)的过程语言扩展由三部分组成:声明declare、执行begin、异常处理exception(可选)存储程序类型:函数、过程、包、触发器...[@more@]dbms_out_put.putline(***)pl/sql输出函数pl/sql解析函数(使用alter system set *** 修改参数):①pl/sql_code_type = interpreted / nativeinterpreted:执行plsql速度快、无debug功能native:有debug功能②pl/sql_debug = ture / false当设置为ture时 忽略code_type设置 使用debug功能③pl/sql_optimize_level = 1 / 21:编译快 多用于开发2:运行快 多用于管理set server
基础开始——权限
权限(system privilege系统权限、object privilege对象权限)系统权限:A给予B某系统权限,B给予C该系统权限,当B被收回此系统权限时,C不会被收回该系统权限。对象权限:A给予B某对象权限,B给予C该对象权限,当B被收回此对象权限时,C同时被收回该对象权限。[@more@]1.select * from dba_sys_privs where grantee='TEST'查询用户TSET所拥有的系统权限2.select * from dba_tab_privs where grantee='TEST'查询用户TEST所拥有的对象权限3.grant create session to abc授予用户abc连接数据库的系统权限4.grant select on aaa to test授予用