- 浏览: 7936 次
- 性别:
- 来自: 深圳
最新评论
文章列表
From子句的Table顺序对性能的影响(仅限RBO)
使用CBO时,编写SQL语句时,不必考虑"FROM" 子句后面的表或视图的顺序和"WHERE"子句后面的条件顺序。数据库会对表和索引进行分析,产生一些表和索引的统计信息。CBO会根据数据库收集到的表信息和索引信息,来决定SQL执行的最佳路径。也就是说,在CBO模式下From子句的Table顺序对性能没有任何影响。数据库会生成多种执行计划,并根据表信息和索引信息,来判断最佳的执行计划。
使用RBO时,Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础 ...
物化视图(materialized view)
物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能 ...
SQLPLUS查看执行计划
1、在sys用户下,创建角色plustrace
SQL> conn sys as sysdba
Enter password:
Connected.
SQL> @$ORACLE_HOME/sqlplus/admin/plustrce.sql
plustrce.sql文件内容:
set echo on
drop role plustrace;
create role plustrace;
grant select on v_$sesstat to plustrace;
grant select on v_$statname to plustrace;
...
缓存表 内存表(将表keep到内存)
一、引言:
有时候一些基础表需要非常的频繁访问,尤其是在一些循环中,对该表中的访问速度将变的非常重要。为了提高系统的处理性能,可以考虑将一些表及索引读取并保存到内存中。
...
-- 非标号数组
DECLARE
TYPE type_table_list IS TABLE OF VARCHAR2(1024); -- 非标号,需要动态初始化,动态extend
table_list_1 type_table_list;
BEGIN
-- 报错,非标号需要动态初始化,动态extend , 否则会报错
-- table_list_1(1) := '1A';
-- 初始化1, 声明时赋初值, 可以整体赋值,不需要动态extend
-- table_list_1 := type_table_list( '12A', '12B ...
Oracle的锁表与解锁
select ls.osuser os_user_name, -- 操作系统/用户名
ls.username user_name, -- 数据库用户名
decode(ls.type, 'RW', 'Row wait enqueue lock', 'UL', 'User supplied lock')lock_type, --锁的类型
o.object_name object, --被锁住的对象名
decode(ls.lmode, 1, null, 2, 'Row Share', 3, 'Row Exclusive', 4, 'Share', 5, 'Sha ...
SQL> select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET'
SQL> export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
SQL> exp 'DBAC01/DBAC01' BUFFER=64000 tables=t_ac_account_entry_temp file='/home/oracle/dataexp/t_ac_account_entry_temp.dmp' log='/home/oracle/dataexp/t_ac_account ...
SQL> CREATE USER DBAC01 IDENTIFIED BY DBAC01 DEFAULT TABLESPACE AC_DATA TEMPORARY TABLESPACE TEMP;
说明:
1、创建了用户名密码都为DBAC01的用户
2、DEFAULT TABLESPACE,设置用户的默认表空间AC_DATA
3、TEMPORARY TABLESPACE,设置用户的临时空间TEMP
这个时候DBAC01还是不能登陆成功的,需要赋予相应的权限:
SQL>grant create session to DBAC01; -- 赋予create session的权限,这样 ...
SQL> create tablespace AC_DATA datafile '/opt/oracle/dbbase/oradata/orcl/AC_DATA01.dbf' size 1024M autoextend on next 32M maxsize 2048M;
SQL> create tablespace AC_INDEX datafile '/opt/oracle/dbbase/oradata/orcl/AC_INDEX01.dbf' size 1024M autoextend on next 32M maxsize 2048M;
说明:
1、tbs_ctxsys, ...
DBMS_UTILITY.get_time 就是精度到秒,并且是秒后面2位小数.
TO_CHAR(SYSDATE,'SSSSS') 单纯输出的是秒, 这个秒是按照四舍五入表示的, 意思比如是 5.6 秒, 你看到就是6秒。
秒=DBMS_UTILITY.get_time /100
如下的这个例子, 有可能会输出502, 503 .. 中间的间隔是 5 秒. 你可以理解成 5.02 秒.
DECLARE
ln_starttime NUMBER(10);
ln_endtime NUMBER(10);
BEGIN
ln_starttime := dbms_utilit ...
1 RECORD、VARRAY、TABLE的详解
1.1 RECORD
定义记录数据类型。它类似于C语言中的结构数据类型(STRUCTURE),PL/SQL提供了将几个相关的、分离的、基本数据类型的变量组成一个整体的方法,即RECORD复合数据类型。在使用记录数据类型变量时,需要在声明部分先定义记录的组成、记录的变量,然后在执行部分引用该记录变量本身或其中的成员。
定义记录数据类型的语法如下:
TYPE RECORD_NAME IS RECORD(
V1 DATA_TYPE1 [NOT NULL][:=DEFAULT_VALUE],
V2 DATA_TYPE2 ...
-- Create table
create table SPS_TELESEG
(
teleseg VARCHAR2(20),
provcode VARCHAR2(10),
areacode VARCHAR2(10)
);
/
CREATE OR REPLACE PACKAGE cache_teleseg IS
-- Author : rongxr
-- Created : 2015-7-28 21:07:48
-- Purpose :
TYPE teleseg_record IS RECORD(
teleseg sps_te ...
table 类型的变量可以存储单一数据类型,也可以存储record类型。
-- table类型变量存储的是数字类型
DECLARE
TYPE type_table_un IS TABLE OF NUMBER(10);
table_un type_table_un;
BEGIN
table_un := type_table_un(1, 2, 3, 4, 5);
FOR i IN table_un.first .. table_un.last LOOP
dbms_output.put_line(i || ' : ' || table_un(i));
...
record 类型的变量只能保存从数据库中查询出的一行记录,如果查询出了多行记录,就会出现错误。
-- record类型变量直接赋值
DECLARE
TYPE type_record_user IS RECORD(
user_id NUMBER(10),
user_name VARCHAR2(20));
record_user type_record_user;
BEGIN
record_user.user_id := 11;
record_user.user_name := 'aaa';
dbms_output. ...
-- varray类型变量存储的是数字类型
DECLARE
TYPE type_varray_date IS VARRAY(5) OF number(10);
varray_date type_varray_date;
BEGIN
varray_date := type_varray_date( 1, 2, 3, 4, 5 );
FOR i IN 1 .. varray_date.count LOOP
dbms_output.put_line(i || ' : ' || varray_date(i));
END LOOP;
END;
-- ...