Oracle操作技巧

来源:互联网 发布:windows10还原网络设置 编辑:程序博客网 时间:2024/06/04 10:09

作者:李东龙

        来北京工作已经1周,在这一周中干的基本上都不是开发的事情。由于客户的要求对数据库的做了一些高级操作(起码对我来说已经很高级了)。

        由于之前对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;

 

原创粉丝点击