您的位置:首页 > 数据库 > Oracle

Oracle学习问题 2014-06-20

2014-06-21 00:11 176 查看
一、数据导出:
注意:以下所有命令不是在sqlplus下执行的,而是在cmd命令窗口下执行的,本机一定要装有Oracle,因为exp和imp是oracle的命令,我开始犯的大错啊,一直在sqlplus下执行!

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

  exp system/manager@TEST file=d:\daochu.dmp full=y (有时间导出的时候会出现 无法解析指定的连接标识符的错误, 你把 @TEST 去掉就不报错了,具体不太清楚为什么)

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

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

  3、 将数据库中的表table1 、table2导出

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

  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

(有时间导出的时候会出现 无法解析指定的连接标识符的错误, 你把 @TEST 去掉就不报错了,具体不太清楚为什么)

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

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

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

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

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

  注意:

  你要有足够的权限,权限不够它会提示你。

2,Oracle序列的问题

首先序列主要是为了解决oracle主键自增的,因为oracle不像mysql一样,可以设置主键自增,oralce是通过序列(SEQUENCE )和触发器(Trigger)来实现主键自增策略的

因为以前没有用到oracle序列,今天才知道自己理解是错的,而且钻进了死胡同,同事怎么讲都不懂,不过,还好,最后懂了

,序列(requence)和表是没有关系的, 因为项目在上线时要初始化一些数据,假如有一个table中有3条数据, 下一个主键id需要是4,那么再你建立序列的时候就应该建立一个序列,开始值是4,而不是1,每一个序列和表是没有关系的,你可以N多个表用一个序列,当然,应该没有人这么做吧,应该都是一个表一个序列吧! 举例说明,假如现在有一个表emp 员工表,内有三条数据 ,id分别是1,2,3,然后现在create一个序列,初始值是4,每次+1 ,当你第一次调用这个序列时,返回4,然后你再手动将4设置到emp对象的主键上,此时,你不用纠结,不管你停机还是怎么,下次你再次调用这个序列时,都不会是4了,当然也不会是5,因为每次初始化序列时,他都会加载20个,如果你断电或者宕机,下次就会从21开始,不管你上次缓存中的20个用了没有,都不会再使用了


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: