日期:2014-05-16 浏览次数:20439 次
问题:
数据库表中没有建立主键,即使建立了主键,也是使用与业务相关的字段建立的主键,还有复合主键。
调整:
1)为每个表添加ID列,并创建主键;
2)为每个表创建Oracle Sequence,使用trigger实现自动获取;
3)原来使用业务键创建的主键改为唯一索引。
实现:
1)从旧数据库中导出表结构及其他用户对象,在新数据库中创建用户并导入
exp username/passwd@dbname file=old.dmp rows=n
compress=n
说明:
a) exp命令不能使用一个参数比如tables=all 导出所有表,需要指定表名列表;表名列表获取sql:select table_name from cat where table_type = 'TABLE';
b) 如果只导出表结构而不导出其他用户对象(sequence、procedure、trigger等),可以指定tables参数,例如:tables=tab1,tab2
导入新数据库后,删除没有用的用户对象。(为避免JOB、数据库链、视图因权限不足而失败,使用DBA用户导入)
2)使用程序连接新数据,根据新数据中的表名生成sql,并在新数据库中执行
??? sql的内容包括根据旧主键创建唯一索引、删除旧主键、创建ID列、创建ID主键、创建Sequence、创建Trigger
3)从旧数据库中导出数据,在新数据库中导入数据
exp username/passwd@dbname tables=tablename file=filename.dmp rows=y
compress=n
既包含表结构,又包含数据
---------------------------------------------------------
使用PL/SQL??Developer导出/导入表结构、表数据
1)导出表结构:
Tools-->Export User Objects(导出用户对象) -->选择要导出的表(包括Sequence等)-->.sql文件,导出的都为sql文件
a)不要勾选Include Owner,否则用户对象前面会有Owner名字。不要勾选Include Storage,否则建表语句会有与存储有关的子句。
b)如果只导出表,则只选择表对象。
导出表数据:
Tools-->Export Tables-->选择表,选择SQL Inserts-->.sql文件
?
导入表结构:
执行刚刚导出的sql文件,记住要删掉table前的用户名,比如以前这表名为sys.tablename,必须删除sys
导入表数据:
执行刚刚导出的sql文件