精华内容
下载资源
问答
  • 视图聚类与子空间聚类

    千次阅读 2019-06-16 21:57:45
    若对事物作单视图特征表示,则意味着,增加了特征空间的维度,且不同角度的特征合成同一视图,其特征可能失去原有的意义。 而多视图,则能够发挥各个视图的优势,把同一数据表示成多个特征集,然后在每个特征集上...

    1、多视图聚类

    从对事物的不同角度的理解生成多个特征描述视图,而非单个视图,就是多视图。

    若对事物作单视图特征表示,则意味着,增加了特征空间的维度,且不同角度的特征合成同一视图,其特征可能失去原有的意义。
    而多视图,则能够发挥各个视图的优势,把同一数据表示成多个特征集,然后在每个特征集上可以用不同的方法进行学习,达到协同学习的目的,改善学习性能。

    半监督多视图学习
    找到将将标记数据较好分类的视图,然后将该视图训练出的分类器对未标记的数据进行分类,并将分类结果给到其他视图,帮助其他视图训练分类器。

    2、子空间聚类

    1. 为什么
      1)高维数据使可视化和理解输入变得困难,通常需要预先应用降维技术。它导致了“维度诅咒”,即随着维度增加,所有子空间的完整枚举变得难以处理;
      2)大多数底层聚类技术依赖于结果和降维技术的选择;
      3)数据的许多维度彼此之间可能是不相关的,并且可以在有噪声的数据中屏蔽现有的聚类;
      4)一种常见的技术是执行特征选择,但是在某些情况下,识别冗余维度是不容易的。

    2. 是什么
      子空间聚类是一种在不同子空间发现聚类的技术。
      基本的假设是,我们可以找到只由维度子集定义的有效聚类。
      子空间聚类算法拓展了特征选择的任务,尝试对相同数据的不同子空间上发现聚类;比如对于n个三维的数据,维度分别为abc,当在三维空间中无法区分数据时,可以找到其子空间,假如是ac将其分开,则能够在此子空间下容易地识别类。

    展开全文
  • Listview动态增加与删除控件条目,条目内容可编辑
  • Oracle物化视图与物化视图日志

    万次阅读 多人点赞 2019-04-02 21:43:30
    文章目录物化视图物化视图与普通视图的区别创建一个存放person的表创建一个存放person的address的表初始化数据创建物化视图的语句1.build [immediate|deferred]2.refresh [fast|complete|force] 视图刷新的方式:3.MV...

    以下都是最近我通过网上学习和实践简单总结的一些学习成果,还有很多还是不了解。

    物化视图

    物化视图与普通视图的区别

    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询, Oracle 都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。

    而物化视图是一张实际存在的表,是占有数据库磁盘空间的。
    物化视图并不像普通视图那样,只有在使用的时候才去读取数据,而是预先计算并保存表连接或者聚集等比较耗时操作的结果,这样大大提高了读取的速度,特别适合抽取大数据量表的某些信息。

    创建一个存放person的表

    create table test_person(pid int,name varchar2(20));
    alter table test_person add constraint  pk_pid primary key(pid);
    --删除表
    drop table test_person;
    

    创建一个存放person的address的表

    create table test_address(aid int,address varchar2(20),pid int);
    alter table test_address add constraint pk_aid primary key(aid);
    --删除表
    drop table test_address;
    

    初始化数据

    insert into test_person values(1,'kevin');
    insert into test_address values(1,'SHA',1);
    insert into test_person values(2,'vincent');
    insert into test_address values(2,'HKG',2);
    COMMIT;
    

    创建物化视图的语句

    create materialized view [view_name] 
    build [immediate|deferred]
    refresh [fast|complete|force] 
    [ 
    on [commit|demand] | 
    start with (start_time) next (next_time) 
    ] 
     [enable | disable] query rewrite
    as 
    {创建物化视图用的查询语句} 
    

    1.build [immediate|deferred]

    创建方式(BuildMethods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。

    • BUILD IMMEDIATE是在创建物化视图的时候就生成数据。

    • BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE

    2.refresh [fast|complete|force] 视图刷新的方式:

    • fast: 增量刷新.假设前一次刷新的时间为t1,那么使用fast模式刷新物化视图时,只向视图中添加t1到当前时间段内,主表变化过的数据.为了记录这种变化,建立增量刷新物化视图还需要一个物化视图日志表。create materialized view log on (主表名)。

    • complete:全部刷新。相当于重新执行一次创建视图的查询语句。

    • force: 这是默认的数据刷新方式。当可以使用fast模式时,数据刷新将采用fast方式;否则使用complete方式。

    3.MV数据刷新的时间:

    • on demand:在用户需要刷新的时候刷新,这里就要求用户自己动手去刷新数据了(也可以使用job定时刷新)

    • on commit:当主表中有数据提交的时候,立即刷新MV中的数据;

    • start ……:从指定的时间开始,每隔一段时间(由next指定)就刷新一次;

    4.查询重写(QueryRewrite)

    包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。

    分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLEQUERY REWRITE。

    感觉很少用,有兴趣的可以研究下:
    https://mp.weixin.qq.com/s/5Lg8cSEb3R5WkQwVF9xfPQ

    演示 refresh complete on demand

    create materialized view my_mv_cd
    build immediate refresh complete on demand
    as
    select p.pid as id, p.name, a.address from test_person p,test_address a
    where p.pid = a.aid;
    

    这里的build immediate表示创建物化视图的同时立即导入数据。
    BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE。

    在这里插入图片描述

    在demand模式下,修改基表,物化视图是不会跟着改变的,只能手动DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新

    演示 build deferred

    create materialized view my_mv_cd2
    build deferred refresh complete on demand
    as
    select p.pid as id, p.name, a.address from test_person p,test_address a
    where p.pid = a.aid;
    

    在这里插入图片描述

    如何手动刷新?

    BEGIN
    DBMS_MVIEW.REFRESH (
    list => 'my_mv_cd2',
    Method =>'C',
    refresh_after_errors => True);
    END;
    

    在这里插入图片描述

    演示 refresh complete on commit

    create materialized view my_mv_cc
    build immediate refresh complete on commit
    as
    select p.pid as id, p.name, a.address from test_person p,test_address a
    where p.pid = a.aid;
    
    insert into test_person values(3,'thomas');
    insert into test_address values(3,'ZHA',3);
    COMMIT;
    

    在这里插入图片描述

    一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。缺点就是对基表的DML操作影响很大。

    演示on commit情况下的物化视图更新出错

    而且对基表的DML跟对物化视图的刷新应该是在同一个事务下的。所以如果物化视图更新出错,主表也无法提交事务。

    我们可以做如下的一个实验。。

    创建两个表,不设置主键。

    create table test_person2(pid int,name varchar2(20));
    create table test_address2(aid int,address varchar2(20),pid int);
    

    创建物化视图,刷新时间模式设置为on commit

    create materialized view my_mv_test
    refresh complete on commit
    as
    select p.pid as id, p.name, a.address from test_person2 p,test_address2 a
    where p.pid = a.aid;
    

    然后我们给id加一个唯一索引。

    create unique index u_test_index on my_mv_test(id);
    

    现在开始插入数据。。我们插入相同id的数据

    insert into test_person2 values(1,'kevin');
    insert into test_address2 values(1,'SHA',1);
    insert into test_person2 values(1,'vincent');
    insert into test_address2 values(1,'HKG',1);
    COMMIT;
    

    在这里插入图片描述

    然后我们可以发现两个基表也没有数据提交,说明是在同一个事务下进行了rollback。

    所以使用commit需要注意的地方:

    1. 主表提交时基表也提交,系统开销增大。在繁忙的OLTP系统中会影响一部分性能。如果物化视图更新出错,主表也无法提交事务。
    2. 主表和物化视图必须在同一个数据库中
    3. 无法在基表上执行分布式事务
    4. 不支持含有对象类型或Oracle补充支持类型的物化视图

    更多的参考:
    http://blog.itpub.net/29047826/viewspace-1575568/

    简单总结什么情况下不适合使用物化视图

    1.不适合建立物化视图的情况: 基表有频繁的DML操作 / (on commit刷新时很费时,大大增加DML操作的时间)

    2.多表连接的物化视图仅适合 refresh complete 定时刷新,且刷新时间不能小于30min,否则弊大于利(complete是删除原有数据重新连接多表数据)

    如何查看物化视图

    SELECT * FROM user_mviews;
    SELECT * FROM all_mviews;
    

    如何使用job去刷新物化视图

    begin
    dbms_scheduler.create_job(
      job_name => 'sam_job', --job名
      job_type => 'STORED_PROCEDURE', --job类型
      job_action => 'pc_sam', --存储过程名
      start_date => sysdate, --开始执行时间
      repeat_interval => 'FREQ=MINUTELY;INTERVAL=5', --下次执行时间,每5分钟执行存储过程pc_sam
      comments => '测试存储过程', --注释
      auto_drop => false, --job禁用后是否自动删除
      enabled => true);
    end;
    /
    

    1、job_name: 任务名称

    2、job_type:有三种类型,PL/SQL Block、Stored procedure、Executable

    3、job_action:根据job_type的不同,有不同的含义

    • 如果job_type指定的是存储过程,就需要指定存储过程的名字;
    • 如果job_type指定的是PL/SQL块,就需要输入完整的PL/SQL代码;
    • 如果job_type指定的外部程序,就需要输入script的名称或者操作系统的指令名

    4、start_date:开始时间

    5、repeat_interval:运行的时间间隔,上面例子是每天23点运行一次

    6、end_date:到期时间

    7、enabled:创建后自动激活

    8、auto_drop:默认true,即当job执行完毕都到期是否直接删除job

    9、comments:备注

    关于schedule时间设置可以查看官网:https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_sched.htm#ARPLS72235

    关于可以repeat_interval设置可以参考:https://blog.csdn.net/zq9017197/article/details/6985109

    删除schedule job

    BEGIN
      DBMS_SCHEDULER.DROP_JOB(
         job_name => 'my_mv_cd_job'
      );
    END;
    /
    

    演示如何创建一个schedule job来刷新物化视图

    首先我们创建一个存储过程,用来刷新我们的物化视图

    create or replace procedure my_mv_cd_procedure_job is
    begin
     dbms_mview.refresh('my_mv_cd');
    end my_mv_cd_procedure_job;
    /
    

    然后我们可以通过如下的sql来查询我们的存储过程。。

    SELECT * FROM all_source where type = 'PROCEDURE';
    
    SELECT * FROM user_source where type = 'PROCEDURE';
    

    然后我们创建一个schedule job来trigger我们的刚刚定义的存储过程。。

    BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
       job_name           =>  'my_mv_cd_job',
       job_type           =>  'STORED_PROCEDURE', --指定执行的是存储过程
       job_action         =>  'my_mv_cd_procedure_job', --对应的存储过程名称
       repeat_interval    =>  'FREQ=MINUTELY; INTERVAL=1', --1分钟trigger一次
       enabled            =>  true
       );
    END;
    /
    

    然后我们可以通过如下sql查询我们创建的schedule job

    --查询
    select * from ALL_SCHEDULER_JOBS;
    select * from USER_SCHEDULER_JOBS;
    

    ![image]

    我们可以看到执行时间是相隔了1分钟

    我们可以试着插入数据

    insert into test_person values(4,'justin');
    insert into test_address values(4,'HKG',4);
    commit;
    

    1分钟之后就会发现物化视图trigger刷新了。

    在这里插入图片描述

    如何删除物化视图

    drop materialized view {物化视图名称};
    

    物化视图日志

    物化视图的Fast刷新

    前面说到物化视图是可以进行Fast刷新,也就是增量刷新,当每次刷新的时候不必对整个物化视图进行刷新,只需要对有改动的record进行刷新。
    那db是如何知道有哪些record有change呢?
    通过对基表建立物化视图日志,就可以监测到基表的变动,每当基表有变动的时候就会往对应的物化视图日志中写入数据。当进行Fast刷新的时候,db就会把物化视图日志中的改动写入到物化视图中,这样就实现了增量的刷新。

    [67000][439] ORA-00439: feature not enabled: Advanced replication

    create materialized view log on test_kevin with primary key including new values;
    

    当我在本地尝试创建物化视图日志的时候发生了如下错误:

    [67000][439] ORA-00439: feature not enabled: Advanced replication

    我们可以通过如下sql查看我们db开启的功能:

    select * from v$option where parameter = 'Advanced replication';
    

    通过查看我们可以知道我们的高级复制功能是没有被开启的。不知道是当时安装有问题还是可能这是一个加钱才会有的功能吧。

    创建物化视图日志

    如果我们想要创建fast模式刷新的物化视图就一定要对关联的基表都需要创建物化视图日志。

    Oracle 的物化视图的快速刷新要求必须建立物化视图日志,通过物化视图日志可以实现增量刷新功能。

    • 物化视图日志在建立时有多种选项:可以指定为ROWID、PRIMARY KEY和OBJECTID几种类型,同时还可以指定SEQUENCE或明确指定列名。不过上面这些情况产生的物化视图日志的结构都不相同。
    • 当发生DML 操作时,内部的触发器会把变化记录到物化视图日志里,也就是说物化视图不支持DDL的同步,所以在物化视图的编写过程中不可使用select * from 的形式,因为这样当基表发生变化时,物化视图就会失效。

    物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当截短后出现名称重复时,Oracle会自动在物化视图日志名称后面加上数字作为序号。

    任何物化视图都会包括的4列:

    • SNAPTIME$$:用于表示刷新时间。
    • DMLTYPE$$:用于表示DML操作类型,I表示INSERT,D表示DELETE,U表示UPDATE。
    • OLD_NEW$$:用于表示这个值是新值还是旧值。N(EW)表示新值,O(LD)表示旧值,U表示UPDATE操作。
    • CHANGE_VECTOR$$:表示修改矢量,用来表示被修改的是哪个或哪几个字段。Oracle就是通过CHANGE_VECTOR$$列来记录每条记录发生变化的字段包括哪些。
    • 如果WITH后面跟了ROWID,则物化视图日志中会包含:M_ROW$$:用来存储发生变化的记录的ROWID。
    • 如果WITH后面跟了PRIMARY KEY,则物化视图日志中会包含主键列。
    • 如果WITH后面跟了OBJECT ID,则物化视图日志中会包含:SYS_NC_OID$:用来记录每个变化对象的对象ID。
    • 如果WITH后面跟了SEQUENCE,则物化视图日子中会包含:SEQUENCE$$:给每个操作一个SEQUENCE号,从而保证刷新时按照顺序进行刷新。
    • 如果WITH后面跟了一个或多个COLUMN名称,则物化视图日志中会包含这些列。

    演示创建物化视图with primary key

    我们首先创建一张表

    create table test_person(pid int,name varchar2(20));
    alter table test_person add constraint test_pk_pid primary key(pid);
    

    然后我们创建物化视图日志,指定primary key

    create materialized view log on test_person with primary key;
    

    然后我们可以向基表test_person加入一条数据。

    insert into test_person values(1,'kevin');
    

    然后在update一条数据

    update test_person set name='kevin cai' where pid = 1;
    

    然后我们通过如下sql可以查看物化视图日志的内容。

    select * from mlog$_test_person;
    

    在这里插入图片描述

    including new values

    我们创建物化视图日志的时候还可以带上including new values

    create materialized view log on test_person with primary key including new values;
    

    同样我们也是先insert一条数据然后在update同一条数据,然后我们从mlog$_test_person中的内容就可以看得区别。
    在这里插入图片描述

    NEW VALUES子句允许Oracle数据库将新旧值都保存在物化视图日志中,以便更新DML操作。

    更多参考:

    http://www.itpub.net/forum.php?mod=viewthread&tid=2052180&highlight=

    https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_6003.htm#i2119924

    演示创建物化视图with rowid

    CREATE MATERIALIZED VIEW LOG on test_person with rowid INCLUDING NEW VALUES;
    

    在这里插入图片描述

    使用场景,具体不是很了解,可以参考:https://blog.csdn.net/demonson/article/details/81450938

    实现物化视图的增量刷新

    我们先创建两张表

    create table test_person(pid int,name varchar2(20));
    alter table test_person add constraint test_pk_pid primary key(pid);
    create table test_address(aid int,address varchar2(20),pid int);
    alter table test_address add constraint test_pk_aid primary key(aid);
    

    然后我们对基表创建物化视图日志
    我们这里使用的是with rowid来创建物化视图日志

    CREATE MATERIALIZED VIEW LOG on test_person with rowid INCLUDING NEW VALUES;
    CREATE MATERIALIZED VIEW LOG on test_address with rowid INCLUDING NEW VALUES;
    

    然后我们就可以创建fast刷新模式的物化视图。。

    create materialized view my_test_mv refresh fast WITH ROWID as
      select p.pid as p_id, p.name, a.address, p.ROWID as p_ROWID,a.ROWID as a_ROWID
          from test_person p, test_address a where p.pid = a.pid;
    

    注意:
    with rowid的时候记得创建物化视图的时候需要带上select条件ROWID,不然会宝如下错误:
    ORA-12052: cannot fast refresh materialized view

    而且建MV时一定要加上with rowid,因为没有聚合函数的MV默认是with primary key

    更多参考:https://blog.csdn.net/minwang593/article/details/19205553

    这时候我们可以尝试往基表插入数据

    insert into test_person values(1,'kevin');
    insert into test_address values(1,'SHA',1);
    insert into test_person values(2,'vincent');
    insert into test_address values(2,'HKG',2);
    

    我们可以看到物化视图日志中都有数据

    select * from mlog$_test_person;
    select * from mlog$_test_address;
    

    在这里插入图片描述

    但是物化视图中还没有数据。我们可以通过手动方式刷新物化视图中的数据

    BEGIN
    DBMS_MVIEW.REFRESH (
    list => 'my_test_mv',
    Method =>'C',
    refresh_after_errors => True);
    END;
    

    之后就可以发现物化视图中有数据了。
    在这里插入图片描述

    而且一旦物化视图刷新,关联基表的物化视图日志也会被清空。。

    我们可以通过如下sql删除物化视图和物化视图日志:

    --删除物化视图
    drop materialized view my_test_mv;
    --删除物化视图日志
    drop materialized view log on test_person;
    drop materialized view log on test_address;
    

    然后我们可以试试以外连接的语法来创建物化视图

    create materialized view my_test_mv refresh fast WITH ROWID as
      select p.pid as p_id, p.name, a.address, p.ROWID as p_ROWID,a.ROWID as a_ROWID
          from test_person p left join test_address a on p.pid = a.pid;
    

    然后我们发现我们创建物化视图的时候报错如下:

    [72000][12015] ORA-12015: cannot create a fast refresh materialized view from a complex query

    这是因为物化视图快速刷新不支持标准外联接写法,必须要改写sql

    select * from a,b where a.id(+)=b.id;--b为主表,a为补充
    select * from a,b where a.id=b.id(+);--a为主表,b为补充
    

    所以我们将我们的sql改写为

    create materialized view my_test_mv refresh fast WITH ROWID as
      select p.pid as p_id, p.name, a.address, p.ROWID as p_ROWID,a.ROWID as a_ROWID
          from test_person p, test_address a where p.pid = a.pid(+);
    

    更多参考:https://www.cnblogs.com/tracy/archive/2011/09/01/2162080.html

    总结一下创建fast模式物化视图条件:

    多表连接的物化视图想要使用fast刷新时,

    首先,select 语句中包含到的每一个表都需要创建视图日志;

    其次,视图日志中需要指定在select语句和where条件中用到的该表的字段;

    第三,在select中必须包含所涉及到的所有表的rowid,

    第四,外连接不能使用标志sql语法,应使用(+)这种oracle固有语法.

    当然还有很多其他的限制条件,可以参考:https://blog.csdn.net/aiyocxuan/article/details/78732567

    使用物化视图增量刷新的优缺点

    我个人觉得使用增量模式刷新物化视图的优点就是不需要对整个物化视图进行刷新,当物化视图的数据特别大的时候可以减少刷新的时间,其他的优点没有暂时还没感受到。

    缺点:

    1.使用增量模式进行刷新需要对所有关联的基表都建立物化视图日志,首先在数据库中就要占据一部分的空间,其次对基表创建物化视图日志对基表的DML还是有影响的,可以参考下面:
    Oracle 物化视图快速刷新对性能的影响
    http://blog.itpub.net/28539951/viewspace-2127870/

    2.然后对基表的DML和对物化视图日志的更新应该是在同一个事务里的,因为rollback的时候是会一起rollback的,所以如果物化视图日志一旦失败可能导致基表的DML操作失败,对业务上可能会影响。

    3.物化视图日志的维护成本比较高
    物化视图日志经常会由于物化视图长时间没有刷新,或者基表的一次批量数据更改而变得很大,这会影响物化视图的刷新性能,因此对于这种情况需要对物化视图日志进行处理,降低物化视图日志表的高水位线。

    Oracle的物化视图的快速刷新功能,主要是靠物化视图日志来实现的。
    物化视图日志会记录下基表所有的增、删、改操作,而物化视图执行完快速刷新操作后,会从物化视图日志中将本物化视图刷新过且其他物化视图所不需要刷新的记录删除掉。如果其中一个物化视图一直不刷新,那么物化视图日志就会变得越来越大。
    还有一种情况,比如表中插入了大量的数据,或者删除了大量的数据,或者将表中的某一列统一更新为一个值,这种操作都会在物化视图日志中产生大量的记录。
    而物化视图日志的增大必然影响物化视图的刷新速度。一方面,物化视图在刷新的时候要扫描物化视图日志,另一方面,物化视图在刷新结束后,也要清除物化视图日志中的记录,仍然要扫描物化视图日志,因此物化视图日志的大小直接会影响物化视图快速刷新的速度。更重要的是,物化视图日志的高水位一旦增长到一个很高的位置,即使以后物化视图日志中记录很少,甚至没有记录存在,物化视图在刷新的时候仍然需要较长的时间。

    oracle通过v$sql视图查询sql的平均执行时间

    SELECT SQL_TEXT,EXECUTIONS "总执行次数",ELAPSED_TIME/1000 "总耗时(秒)", ELAPSED_TIME/nvl(EXECUTIONS,1)/1000 "平均耗时(秒)",
           PARSE_CALLS "硬解析次数",DISK_READS "物理读次数",BUFFER_GETS "读缓存区次数"
    FROM v$SQL WHERE SQL_TEXT LIKE '%select * from t1%';
    

    更多参考:https://blog.csdn.net/yh_zeng2/article/details/78946807

    展开全文
  •   <br />一、dba_free_space的说明:  dba_free_space显示的是有free 空间的tablespace ,如果一个tablespace 的free 空间不连续,那每段free空间都会在dba_free_space中存在一条记录。...

     

    一、dba_free_space的说明:

       dba_free_space显示的是有free 空间的tablespace ,如果一个tablespace free 空间不连续,那每段free空间都会在dba_free_space中存在一条记录。如果一个tablespace 有好几条记录,说明表空间存在碎片,当采用字典管理的表空间碎片超过500就需要对表空间进行碎片整理。 

    二、关于dba_free_space的疑问:

    根据如下查询:

    SQL>select tablespace_name from dba_free_space;

    根据查询结果可发现,出现了多个相同的表空间名;为什么呢?这个问题可根据dba_free_space的说明得到解答:dba_free_space显示的是有free 空间的tablespace ,如果一个tablespace free 空间不连续,那每段free空间都会在dba_free_space中存在一条记录。如果一个tablespace 有好几条记录,说明表空间存在碎片,当采用字典管理的表空间碎片超过500就需要对表空间进行碎片整理。 

    根据如下查询语句可发现:

    SQL>select * from dba_free_space;

    一个表空间有两个不连续的block_id,正是因为这样才会导致一个表空间在dba_free_space视图中存在两条记录;

    三、关于dba_free_space视图的问题

    看下面的例子,请高手解释一下好吗?
    ------------------------
    一开始:

    环境:Windows xp+Oracle 10g 10.2.0;

    数据库:PAXDB

    表空间:TEST_TABLESPACE

    test_tablespace(create tablespace test_tablespace datafile 'D:/oracle/ORADATA/PAXDB/test_datafile.dbf' size 300M extent managerment local uniform size 40K);

    用户:test/manager

    说明:新建立的表空间test_tablespace对应的数据文件大小是300m,所在的数据库的数据块大小是8192k,所以对于刚建立的表空间来说,由于数据文件头部占据了0-89个数据块。面的查询block_id=9  我们可以看出,oracle保留了数据文件前面9blockblock 0~8,所以刚开始查询表空间的空闲空间时,数据块bloci_id是从9开始的,总共的字节数是314490880,总共有314490880/8192=38390个数据块,共314490880/1024/1024=299.921875m.总共使用的空间数目是8192*9/1024/1024=0.0703125m.

    下面我们来看看这9block的具体情况:

    block 0:   OS header
    block 1:   datafile header
    block 2:   bitmapped file space header
    block 3~8: Head portion of bitmap blocks

    至于如何看某个block的结构,用bbed再方便不过了,那下面我们就用bbed来看看这9block是什么样的


    SQL>select * from dba_free_space where tablespace_name='TEST_TABLESPACE';

    得到:
          

    然后在TEST_TABLESPACE tablespace中建一表:
    create table cba( cba number(20) );       ---(初始为40k

    SQL>select * from dba_free_space where tablespace_name='TEST_TABLESPACE';

    说明:在表空间初始化建立时指定了uniform参数,说明该表空间里所有的segmentextent大小都相同为40k,所以当在该表空间里建立一个表时,该表所对应的段的扩展extent一次为40k,即40*1024/8192=5个数据块。所以建立一个表后该表空间的空闲空间的数据块block_id从原来的9增加5后递增到14开始。
    drop
    drop table cba

    再查询:
    SQL>select * from dba_free_space where tablespace_name='TEST_TABLESPACE';


    得到:



    (此处就多了一条记录)

    然后再建一表
    create table abc( abc number(20) );       ---(初始为40k

    查询:
    select * from dba_free_space where tablespace_name='TEST_TABLESPACE';
    得到:

    drop 
    drop table abc

    再查询:
    select * from dba_free_space where tablespace_name='TEST_TABLESPACE';
    得到:


    然后建一个初始值为80k的表:
    create table abc( abc number(10) )  storage( initial 80k next 80k );

    再查询:
    select * from dba_free_space where tablespace_name=TEST_TABLESPACE';
    得到:

    解答:

    SQL>desc dba_free_space;

    TABLESPACE_NAMEName of the tablespace containing the extent
    FILE_IDID number of the file containing the extent
    BLOCK_IDStarting block number of the extent
    BYTESSize of the extent in bytes
    BLOCKSSize of the extent in ORACLE blocks
    RELATIVE_FNORelative number of the file containing the extent

    你建的表,占据了数据文件中的一部分。
    dba_free_space记录的是某个数据文件,从某一个blockBLOCK_ID)开始,连续的多少字节(BYTES),同时也换算成多少blockBLOCKS),是空闲的。
    所以你新建一个表后,由于表占据了数据文件的中间一部分,空闲区域被分成两块,你看到的记录也是两条了

    建表后dba_free_space视图中的记录并未变成2条,而是在将该表drop后变成2条了。而且一条记录的block_id89701 ,  blocks5
    而另一条记录的block_id为 89706  。 这样看来的,这两块空闲空间应该是相连的,为什么不并为一块显示呢?

    由于有一块是原来使用的,后释放出来的,所以没有马上合并。

    这种空闲空间的合并,一般是要表空间的pctincrease参数大于0时,SMON进程会自动进行,或者也可以由管理员手工执行命令强制进行。

    展开全文
  • Oracle 物化视图

    万次阅读 2013-05-05 15:12:56
    近来看到一些文章有关Oracle 物化视图的,整合了下,比较详细,以作memo: 物化视图(Materialized View)在9i以前的版本叫做快照(SNAPSHOT),从9i开始改名叫做物化视图。其实无论是快照还是物化...

    近来看到一些文章有关Oracle 物化视图的,整合了下,比较详细,以作memo:



    物化视图(Materialized View)在9i以前的版本叫做快照(SNAPSHOT),从9i开始改名叫做物化视图。其实无论是快照还是物化视图,都能体现出这个对象的特点。
    物化视图中的数据来自于基表某个时刻(物化视图的创建时刻,或刷新时刻),因此可以认为是基表都个时刻的快照。
    物化视图和视图类似,反应的是某个查询的结果,但是和视图仅保存SQL定义不同,物化视图本身会存储数据,因此是物化了的视图。

    根据使用功能来分,物化视图可以分为用于数据复制的,或用于预计算查询重新的两个方面。
    物化视图本身有具有很多特性,根据创建方式、刷新方式、是否可更新、是否支持查询重新等可以将物化视图进行进一步的细分。

    用于数据复制的物化视图

    物化视图的一个主要功能就是用于数据的复制,Oracle推出的高级复制功能分为两个部分,多主复制和物化视图复制。
    而物化视图复制就是利用了物化视图的功能。

    物化视图复制包含只读物化视图复制、可更新物化视图复制和可写物化视图复制。
    只读物化视图复制建立的是源数据库的只读环境。可更新物化视图复制建立基于物化视图双向复制环境。
    可写物化视图复制在物化视图建立的时候使用了FOR UPDATE,但是没有像可更新物化视图那样添加到物化视图组中,因此本地物化视图可以修改,但是修改无法发送到源数据库中,因为修改在物化视图刷新后会丢失,这种类型的物化视图复制很少使用。

    只读物化视图环境复制创建的例子:
    http://www.itpub.net/thread-204968-1-1.html
    http://www.itpub.net/viewthread.php?tid=234279


    物化视图复制环境的维护

    物化视图复制环境包括主站点和物化视图站点。根据物化视图是否需要更新,决定是否建立复制组和物化视图组。
    对于只读物化视图而言,不需要建立复制组和物化视图组,因此主站点除了建立物化视图日志外,几乎不需要进行任何的改变。
    而对于可更新的物化视图,则物化视图必须添加到物化视图组中,因此主站点比较建立复制组。如果主站点本身不是多主复制中的成员,那么可以在主站点上建立一个单主复制环境。
    对于包含复制组的主站点而言,复制组中的表的DDL操作会和普通表的DDL有所不同,直接对表进行DDL可能会破坏复制对象。

    物化视图复制环境中一些维护相关问题

    物化视图导出导入可能导致物化视图日志的失效:一个很恐怖的bug,会在意想不到的情况下造成物化视图复制环境被破坏。
    物化视图注册信息的清除:物化视图清除注册信息的问题。
    物化视图复制快速刷新的限制(一):不能在复制得到的物化视图上建立快速刷新的物化视图。
    物化视图复制快速刷新的限制(二):变向的解决方案,将连接或聚集物化视图提前放到基表站点。
    包含复制环境的数据库迁移(一):物化视图站点通过EXP/IMP进行迁移。
    包含复制环境的数据库迁移(二):单主站点通过EXP/IMP进行迁移。
    如何确定导致刷新组刷新失败的物化视图(一):讨论对于本地物化视图,如何定位刷新组中刷新失败的物化视图。
    如何确定导致刷新组刷新失败的物化视图(二):这篇文章描述一种对于各种情况均适用的方法。
    物化视图日志没有清除:介绍了手工清除非正常删除的物化视图的注册信息。
    物化视图刷新过程中出现的约束冲突问题:物化视图刷新过程中约束冲突的解决方法。
    ORA-26500错误:建立、删除函数索引等操作执行后应该重新对表生成复制支持。


    用于预计算的物化视图

    这种类型的物化视图一般用于数据仓库系统。主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。这种物化视图还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的物化视图进行查询,完全对应用透明。

    这种物化视图可以分为以下三种类型:包含聚集的物化视图;只包含连接的物化视图;嵌套物化视图。三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大。

    创建物化视图时可以指定多种选项:
    创建方式(Build Methods):包括BUILD IMMEDIATE和BUILD DEFERRED两种。BUILD IMMEDIATE是在创建物化视图的时候就生成数据,而BUILD DEFERRED则在创建时不生成数据,以后根据需要在生成数据。默认为BUILD IMMEDIATE。
    查询重写(Query Rewrite):包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的物化视图是否支持查询重写。查询重写是指当对物化视图的基表进行查询时,Oracle会自动判断能否通过查询物化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的物化视图中读取数据。默认为DISABLE QUERY REWRITE。
    刷新(Refresh):指当基表发生了DML操作后,物化视图何时采用哪种方式和基表进行同步。刷新的模式有两种:ON DEMAND和ON COMMIT。ON DEMAND指物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新。ON COMMIT指出物化视图在对基表的DML操作提交的同时进行刷新。刷新的方法有四种:FAST、COMPLETE、FORCE和NEVER。FAST刷新采用增量刷新,只刷新自上次刷新以后进行的修改。COMPLETE刷新对整个物化视图进行完全的刷新。如果选择FORCE方式,则Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用FAST方式,否则采用COMPLETE的方式。NEVER指物化视图不进行任何刷新。默认值是FORCE ON DEMAND。

    可以指明ON PREBUILD TABLE语句将物化视图建立在一个已经存在的表上。这种情况下,物化视图和表必须同名。当删除物化视图时,不会删除同名的表。这种物化视图的查询重写要求参数QUERY_REWRITE_INTEGERITY必须设置为trusted或者stale_tolerated。

    物化视图可以进行分区。而且基于分区的物化视图可以支持分区变化跟踪(PCT)。具有这种特性的物化视图,当基表进行了分区维护操作后,仍然可以进行快速刷新操作。


    基于预计算物化视图特点的简单描述:
    http://yangtingkun.itpub.net/post/468/11356



    物化视图的特点

    物化视图创建:
    建立包含ROLLUP或CUBE的物化视图:何时使用包含ROLLUP和CUBE的物化视图。
    建立物化视图所需权限(一):建立普通物化视图所需权限。
    建立物化视图所需权限(二):建立快速刷新物化视图所需权限。
    建立物化视图所需权限(三):建立ON COMMIT物化视图所需权限。
    建立物化视图所需权限(四):建立查询重写物化视图所需权限。
    在包含LONG类型的表上建立物化视图:物化视图可以复制LONG类型。
    物化视图的创建写法与刷新问题:物化视图的创建写法与刷新问题。
    物化视图删除的顺序:讨论的删除物化视图和删除物化视图日志的顺序。
    创建其他用户下的物化视图报错权限不足:创建一个其他用户的物化视图时报错。




    物化视图快速刷新:
    定位导致物化视图无法快速刷新的原因:当无法创建快速刷新的物化视图时,如何找到物化视图不能快速刷新的原因。
    物化视图的快速刷新(一):基于连接的物化视图的快速刷新限制。
    物化视图的快速刷新(二):基于聚集的物化视图的快速刷新限制。
    物化视图的快速刷新(三):包含UNION ALL的物化视图的快速刷新限制。
    两个导致物化视图无法快速刷新的问题:同义词问题和不同表字段追加问题。
    物化视图的非原子性刷新:介绍物化视图的原子性刷新特点。

    物化视图查询重新:
    建立支持查询重写的同名物化视图失败会删除原有物化视图:这个bug可能导致你原有物化视图被意外删除。
    物化视图查询重写的限制(一):建立查询重写的物化视图的限制。
    物化视图查询重写的限制(二):使用查询重写功能的限制条件。

    物化视图PCT特性:
    物化视图的PCT特性(一):基于分区表的物化视图的PCT特性介绍。
    物化视图的PCT特性(二):基于分区表的物化视图的PCT特性的限制条件。
    10G物化视图PCT快速刷新不再需要物化视图日志(一):Oracle10g增加了物化视图PCT快速刷新的支持,使用PCT快速刷新不再需要物化视图日志。
    10G物化视图PCT快速刷新不再需要物化视图日志(二):继续深入研究一下PCT快速刷新的机制。
    10G物化视图PCT快速刷新不再需要物化视图日志(三):研究PCT快速刷新的机制。



    物化视图深入研究

    对于物化视图的内部机制的研究:

    物化视图日志结构:详细介绍Oracle物化视图日志的各个字段的含义。
    Oracle如何根据物化视图日志快速刷新物化视图:描述Oracle是如何利用物化视图日志来刷新物化视图的。
    物化视图日志如何避免系统时间变化带来的影响:介绍Oracle的物化视图日志机制是如何避免调整系统时间带来的影响的。
    物化视图是否根据字段进行刷新(一):描述现象。
    物化视图是否根据字段进行刷新(二):对Oracle的刷新行为进行推测。
    物化视图是否根据字段进行刷新(三):通过SQL_TRACE的方式确认前面文章的推测。
    小议物化视图与基表数据不一致的消除(一):快速刷新的只读物化视图于基表不一致的解决方法。
    小议物化视图与基表数据不一致的消除(二):修改物化视图日志来同步INSERT和DELETE操作。
    小议物化视图与基表数据不一致的消除(三):如何通过修改物化视图日志来同步UPDATE操作。
    小议物化视图与基表数据不一致的消除(四):如何通过修改物化视图日志来同步包含LOB列的UPDATE操作。
    一个物化视图快速刷新的问题:不影响快速刷新的限制物化视图的字段精度方法。
    物化视图日志的维护:降低物化视图日志表的高水位线。
    利用触发器对物化视图刷新进行定制:可以通过在物化视图上创建触发器的方式,对刷新操作进行定制。
    物化视图刷新并非完全根据物化视图日志记录:物化视图的刷新不仅仅依赖于物化视图日志。
    数的物化视图。
    包含LOB的物化视图快速刷新:9.2和10上对于包含LOB的物化视图的快速刷新,处理机制不同。
    包含LOB的物化视图快速刷新(二):继续研究10g以后对LOB对象是如何刷新的。
    包含LOB的物化视图快速刷新(三):研究10g以后版本当LOB对象超过32K时,物化视图如何刷新。
    包含LOB的物化视图快速刷新(四):对比9i和11g包含LOB的物化视图的刷新性能。
    物化视图日志表被DROP后建立物化视图报错:如果物化视图日志表是直接被DROP,则建立物化视图时报错。
    获取物化视图字段的修改矢量(一):描述如何获取一个列修改后对应的物化视图修改矢量。
    获取物化视图字段的修改矢量(二):介绍多个字段被修改的情况。
    获取物化视图字段的修改矢量(三):封装了一个函数来完成这个功能。


    物化视图功能灵活运用

    物化视图功能很强大,灵活运用物化视图,可以使得现有的功能锦上添花,也可以实现更多的功能


    物化视图方式进行逻辑数据迁移:数据库逻辑迁移方式除了EXP/IMP之外,还可以使用物化视图进行迁移。
    利用物化视图进行逻辑数据迁移要点:简单介绍一下使用物化视图进行逻辑数据迁移过程中需要注意的一些要点。

    一个物化视图快速刷新的问题:不影响快速刷新的限制物化视图的字段精度方法。
    利用触发器对物化视图刷新进行定制:可以通过在物化视图上创建触发器的方式,对刷新操作进行定制。
    改造DISTINCT物化视图(一):介绍SELECT语句中的DISTINCT操作。
    改造DISTINCT物化视图(二):介绍COUNT或SUM聚集函数中的DISTINCT操作。
    改造DISTINCT物化视图(三):描述一个包含UNION ALL的例子。
    改造包含MAX或MIN的物化视图:如何改造一个包含MAX或MIN聚集函数的物化视图。




    Oracle的在线重定义功能其实本质就是利用物化视图日志来实现的,重定义过程的数据同步也是利用物化视图的快速刷新。
    不过由于在线重定义也需要物化视图日志的支持,因此在11g以前,是没有办法对已经建立物化视图日志的表进行在线重定义的,不过11g中Oracle增加了这个功能:
    Oracle11新特性——在线操作功能增强(六):在线重定义功能对物化视图日志的支持。


    物化视图有关的问题和BUG

    一些物化视图关于的问题和BUG描述:

    oracle的执行计划居然出错!:9204中查询重写的bug。
    建立支持查询重写的同名物化视图失败会删除原有物化视图:这个bug可能导致你原有物化视图被意外删除。

    物化视图导出导入可能导致物化视图日志的失效:一个很恐怖的bug,会在意想不到的情况下造成物化视图复制环境被破坏。
    两个导致物化视图无法快速刷新的问题:同义词问题和不同表字段追加问题。
    物化视图注册信息的清除:物化视图清除注册信息的问题。
    ORA-600(999)错误(一):物化视图刷新的问题。
    ORA-600(999)错误(二):进一步深入研究这个问题。
    ORA-600(999)错误(三):进一步深入研究数据库中缺少了哪些信息造成了这个问题。
    物化视图刷新过程中出现的约束冲突问题:物化视图刷新过程中约束冲突的解决方法。
    建立物化视图导致数据库实例崩溃:建立物化视图的时候,直接导致了实例的崩溃。
    小议物化视图与基表数据不一致的消除(一):快速刷新的只读物化视图于基表不一致的解决方法。
    小议物化视图与基表数据不一致的消除(二):修改物化视图日志来同步INSERT和DELETE操作。
    小议物化视图与基表数据不一致的消除(三):如何通过修改物化视图日志来同步UPDATE操作。
    小议物化视图与基表数据不一致的消除(四):如何通过修改物化视图日志来同步包含LOB列的UPDATE操作。
    10203设置CURSOR_SHARING为SIMILAR导致物化视图刷新失败:设置CURSOR_SHARING为SIMILAR导致物化视图刷新失败。
    一个物化视图快速刷新的问题:不影响快速刷新的限制物化视图的字段精度方法。
    ORA-600(ksmovrflow)错误:8i或9i数据库以10g的基表建立物化视图的时候报错。
    如何确定导致刷新组刷新失败的物化视图(一):讨论对于本地物化视图,如何定位刷新组中刷新失败的物化视图。
    如何确定导致刷新组刷新失败的物化视图(二):这篇文章描述一种对于各种情况均适用的方法。
    物化视图基表站点升级导致物化视图刷新错误ORA-4062:物化视图快速刷新报错,出现ORA-4062、ORA-4068错误。
    ORA-600(kkzgavupd_agg.2)错误:在9204上快速刷新一个物化视图出现这个错误。
    物化视图删除的顺序:讨论的删除物化视图和删除物化视图日志的顺序。
    物化视图日志的维护:降低物化视图日志表的高水位线。
    创建其他用户下的物化视图报错权限不足:创建一个其他用户的物化视图时报错。
    ORA-6544(55916)错误:在11g上建立物化视图访问10.1的源表报错。
    ORA-12028错误:在建立物化视图中碰到了这个错误。
    ORA-23515错误:包含物化视图的表空间无法直接删除。
    ORA-26500错误:建立、删除函数索引等操作执行后应该重新对表生成复制支持。


    展开全文
  • 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有...
  • 实体化视图的结果保存在一个普通的数据表中,在对实体化视图进行查询的时候不再对创建实体化视图的基表进行查询,而是直接查询实体化视图对应的结果表,然后通过定期的刷新机制来更新MView表中的数据。...
  • Oracle 视图

    千次阅读 2012-08-14 23:52:38
    视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样触发定义在基表上的触发器。(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束)  2.视图的...
  • 物化视图

    2013-04-16 12:01:35
    物化视图的一般用法物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询...
  • Oracle普通视图和物化视图的区别

    千次阅读 2017-01-09 11:25:21
    转自:...普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。1、物化视图的类型:ON DEMAN
  • 普通视图和物化视图的区别 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样...
  • Oracle 物化视图使用

    万次阅读 2016-04-22 14:07:45
    一、物化视图用法:物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询...
  • 数据库之视图、索引

    千次阅读 2016-10-10 09:03:01
    数据库视图以及索引的概念和作用介绍
  • oracle 普通视图 和 物化视图 的区别

    千次阅读 2015-06-01 15:02:18
    物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有...
  • Oracle-动态性能视图解读

    万次阅读 2016-11-18 19:43:36
    启动例程时,ORACLE自动建立动态性能视图;停止例程时,ORACLE自动删除动态性能视图。数据字典信息是从数据文件中获得,而动态性能视图信息是从SGA和控制文件取得。所以,两者所反映的信息还是有很大差异的。...
  • 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有...
  • MySQL之视图

    2020-03-30 23:47:22
    MySQL之视图什么是视图创建视图修改视图删除视图查看视图视图的使用视图和表的对比 什么是视图 视图:MySQL从5.0.1版本开始提供视图功能。一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在...
  • mysql 视图

    千次阅读 2011-10-26 11:07:40
    经常用到的查询,或较复杂的联合查询应当创立视图,这是优化性 能的,还有就是涉及到权限管理方面,比如某表中的部分字段含有机密信息,不应当让低权限的用户访问到的情况,这时候给这些用户提供一个适合他们权限...
  • 物化视图 数据库

    千次阅读 2014-01-20 20:03:58
    基本定义: 物化视图,它是用于预先计算并保存...物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL 语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。 其中物化
  • 普通视图和物化视图的区别

    万次阅读 多人点赞 2011-02-28 16:48:00
    而物化视图是将数据转换为一个表,实际存储着数据,这样查询数据,就不用关联一大堆表,如果表很大的话,在临时表空间内做大量的操作。普通视图的三个特征:1、是简化设计,清晰编码的东西,他并不是提高性能的,...
  • Oracle物化视图

    千次阅读 2012-06-24 16:52:28
    Oracle的物化视图提供了强大的功能,可以用于...物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;物化视图需要占用存储空间;当基表发生变化时,物化视图也应当刷新。  物化
  • oracle 临时表空间的增删改查操作 oracle 临时表空间的增删改查 1查看临时表空间 dba_temp_files 视图v$tempfile 视图 select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_...
  • oracle视图原理以及dml操作视图限制

    千次阅读 2017-07-07 18:10:10
    oracle视图实际上就是封装sql语句,对外提供一个别名,使用者不需要关心复杂的sql,视图执行之后将执行的结果当做一个表来使用,相当于一个虚拟的表,如果想在视图上进行DML的操作,在创建时候有两个选项 ...
  • Oracle 物化视图介绍

    千次阅读 2012-09-24 23:57:27
     物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。   物化视图可以用于...
  • PLSQL 视图

    万次阅读 2015-11-12 23:13:39
    PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的...在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂
  • oracle 临时表空间的增删改查操作 oracle 临时表空间的增删改查 1查看临时表空间?dba_temp_files视图v$tempfile视图 select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,626
精华内容 53,450
关键字:

视图会增加空间吗