当前位置:数据库 > Oracle >>

Oracle操作技巧

Oracle操作技巧
 
由于客户的要求对数据库的做了一些高级操作(起码对我来说已经很高级了)。
        由于之前对Oracle也没有深入的学习。对很多操作都没有听说过,但在开发中我认为还是比较重要的,作为开发的基础(数据库)。还是非常值得学习的。
        下面对表空间、分区表、批量导入测试数据,等操作进行一下整理。
 
    一、表空间
1、  创建表空间
  Create tablespace表空间名称  datafile'(数据文件地址和名称—.dbf文件)'  size 50m(文件大小);
         一般服务器都用的是linux或者是unix的,对于表空间的地址就需要去里面查看了。一般连接都用 cmd->telnet->然后是用户名、密码了。所以还是很有必要熟悉一下命令。
2、  删除表空间
   DROP TABLESPACE表空间名称 INCLUDING CONTENTS AND DATAFILES CASCADECONSTRAINTS;
3、  查询表空间使用量
   alter database  datafile'数据文件地址+名称(如:/oracle10/data_file_name.dbf)' resize 500m(要改的大小)
4、  查询表空间使用量
select a.tablespace_name,a.bytes/1024/1024"Sum MB", (a.bytes-b.bytes)/1024/1024 "usedMB",b.bytes/1024/1024"free MB" from
(select tablespace_name,sum(bytes)bytes from dba_data_files group by tablespace_name) a,
(selecttablespace_name,sum(bytes)bytes,max(bytes) largest from dba_free_space group bytablespace_name) b
where a.tablespace_name =b.tablespace_name
order   by   ((a.bytes-b.bytes)/a.bytes)  desc  
 
         这个就不解释了, 直接粘贴就可以。 这是查的是Oracle本身自己建的视图。具体怎么搞的我也不是很清楚。              对于表空间大概也就这么些个操作,如果表空间出现问题的话基本有这些就足够解决了。
 
     二、分区表
        先来说说为什么要建分区表吧!
        1.      提高查询效率
     据分析如果数据量极大的话,都放到一个表空间的话,查询没有个一个隔离,查询基数就特别大,查询就会非常慢。像我们现在需求,大概每天都会产生10000000多万的数据量,这样查询当然会非常慢了!
     如果按照时间或者按照某个设备产生的数据划分,那查询基数就大大减小了。对于查询那个分区表,这个在程序当中控制就可以了。当然Oracle也会通过你这个分区表的规则先处理一下。
      2.      减小数据文件要求空间
             数据存储在数据库中大小肯定是一定的。怎么能减小数据文件的要求空间呢?
        如果你都把数据都存入一个数据文件中,那么这个文件在磁盘的可以扩展的空间就必须足够,要么数据就搞不进去了!如果是建分区表的话,我们可以把分区表对应的数据文件存放在不同的磁盘上。这样对他的限制就很小了。        
            分区表存在这样的优势,当然也存在劣势。
1、  全局查询较慢
      如果查询的条件不能限制在几个分区表中查询话的,那查询就会在每个分区表中都会查询。那就慢多了!
2、  表空间管理繁琐
      分区表很可能越建越多,这个管理起来就有些麻烦了。
      暂时我只有这些对分区表的感受。在随后的开发中应该还会遇到这样那样的问题。下面咱们就进入分区的创建和维护阶段
 
       1、  创建分区表
CREATE TABLE表名
 (    
          数据库表字段
 )
 partition by range(CATALOG_TIME)
 (
Partition 分区表名称 values less than (TO_DATE('2013-04-18', 'yyyy-mm-dd')) tablespace表空间名称,
Partition 分区表名称 values less than (TO_DATE('2013-04-19', 'yyyy-mm-dd')) tablespace表空间名称,
Partition 分区表名称 values less than (TO_DATE('2013-04-20', 'yyyy-mm-dd')) tablespace表空间名称
 )
         该分区表是按天建的。当然也可以按照其他的规则建立
 
2、  新增分区表
      新建分区表之后,很可能分区建的少了,我们需要新增一下,当然不能删了之前的所有表,重新执行上面的语句。如果表中有数据那就都没有了。
        alter table表名 addpartition分区表名 valuesless than (TO_DATE('2013-04-22', 'yyyy-mm-dd')) tablespace表空间名称;
 
     三、导入测试数据
       基本上表建好了之后就要导入测试数据了,怎么才能高效的导入测试数据,这是我一直很困扰我的问题。搞点测试数据实在是太困难了。
      请看下列代码,可能对你很有帮助。
      由于我们用的是Oracle,Oracle又不支持主键自增。所以在导入数据之前先要新建一个序列来帮助你生成主键。
[1]创建序列
     CREATE  SEQUENCE  SEQ_TEST MINVALUE 1  MAXVALUE 100000  START WITH 1  INCREMENT  BY 1  NOCACHE ORDER;
               语句很简单,就不做解释了。
         [2]插入数据(循环)
              declare
              maxrecordsCONSTANT int:=100000;
              iint:=1;
              begin
                      fori in 1..maxrecords loop
                               INSERT INTO表名(id,字段名称……)
                                          VALUES
                                (SEQ_TEST1.NEXTVAL,(字段值));
                      endloop;
                      commit;
              end;
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,