oracle导出导入数据

转自 http://yangrenjun.iteye.com/blog/623839
Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库。

    对于初学者来说,为了避免麻烦,可以用'Database Configuration Assistant'向导来创建数据库。

    创建完数据库后,并不能立即在数据库中建表,必须先创建该数据库的用户,并且为该用户指定表空间。

    下面是创建数据库用户的具体过程:



    如下功能完成是在:sqlplusw 下完成的;



    1.假如现在已经建好名为'news'的数据库,此时在F:\oracle\product\10.1.0\oradata\目录下已经存在news目录(注意:我的Oracle10g安装在F:\oracle下,若你的Oracle安装在别的目录,那么你新建的数据库目录就在*\product\10.1.0\oradata\目录下)。



    2.在创建用户之前,先要创建表空间:

    其格式为:格式:  create tablespace 表间名 datafile '数据文件名' size 表空间大小;

    如:

    SQL> create tablespace news_tablespace datafile 'F:\oracle\product\10.1.0\oradata\news\news_data.dbf' size 500M;

    其中'news_tablespace'是你自定义的表空间名称,可以任意取名;'F:\oracle\product\10.1.0\oradata\news\news_data.dbf'是数据文件的存放位置,'news_data.dbf'文件名也是任意取;'size 500M'是指定该数据文件的大小,也就是表空间的大小。



    3.现在建好了名为'news_tablespace'的表空间,下面就可以创建用户了:

    其格式为:格式:  create user  用户名 identified by 密码  default tablespace 表空间表;

    如:

    SQL> create user news identified by news default tablespace news_tablespace;

    默认表空间'default tablespace'使用上面创建的表空间。
   注:也可以跳过创建表空间这一步,直接用名为users的默认表空间语句如下:
          create user test identified by test default tablespace users;


    4.接着授权给新建的用户:

    SQL> grant connect,resource to news;  --表示把 connect,resource权限授予news用户

    SQL> grant dba to news;  --表示把 dba权限授予给news用户

    授权成功。
   
    下面介绍的是导入导出的实例。

  数据导出:

  1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中

  exp system/manager@TEST file=d:\daochu.dmp full=y

  2 将数据库中system用户与sys用户的表导出

  exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)

  3 将数据库中的表inner_notify、notify_staff_relat导出

  exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat)

  4 将数据库中的表table1中的字段filed1以"00"打头的数据导出

  exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"

  上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。

  也可以在上面命令后面 加上 compress=y 来实现。

  数据的导入

  1 将D:\daochu.dmp 中的数据导入 TEST数据库中。

  imp system/manager@TEST  file=d:\daochu.dmp

  imp aichannel/aichannel@HUST full=y  file= d:\data\newsmgnt.dmp ignore=y

imp dekey/dekey529@ORCL full=y file=c:\dekey.dmp ignore=y

  上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。

  在后面加上 ignore=y 就可以了。

  2 将d:\daochu.dmp中的表table1 导入

  imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1)

  基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。

  注意:

  操作者要有足够的权限,权限不够它会提示。

  数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。

    总结:当拿到由拥有DBA权限的用户导出的数据时,最好问清楚其缺省表空间,如果目标数据库中存在与导出数据库同名的表空间时,这种情况需要特别注意。
我们往往在一看到“IMP-00013: 只有 DBA 才能导入由其它 DBA 导出的文件” 这个错误信息后,就立刻给导入用户授予DBA权限,但却忽略了DBA的角色是拥有对数据库中所有表空间unlimit的权限,造成花费很长时间import结束后,却发现没有导入到预期的表空间中。
简而言之,如果有同名表空间存在的话,必须将导入用户的 unlimited tablespace的权限 revoke 掉,否则数据将被直接存放到了那个同名表空间中,而不是导入用户缺省的表空间中;如果没有同名表空间,则无需进行 revoke,oracle 会自动将数据存放在导入用户的缺省表空间中。
最后一个需要注意的问题就是DBA授权问题,个人建议,一个数据库中除了system和sys用户以外,最好严格控制DBA权限的授予,尤其是不要随便赋予应用系统schema的owner以这个权限。目前国内的软件开发以及项目管理的能力还很薄弱,绝大多数项目中,不会设立专门的数据库管理角色,又为了图方便,往往赋予应用系统schema的owner以DBA权限,这样一来,在一个几十人或者上百人的团队中,其中任何一个开发人员或是运维人员一个随意的对DB的操作,对DB而言也许将会是灾难性的。因此,当导入数据后,应及时revoke掉 DBA 权限。

猜你喜欢

转载自learnmore.iteye.com/blog/1463287