日期: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文件