欢迎光临本地信息咨询网
详情描述

1. 使用 CREATE TABLE AS SELECT (CTAS)

最常用的表复制方法,复制表结构和数据:

-- 复制表结构和所有数据
CREATE TABLE new_table AS SELECT * FROM original_table;

-- 复制表结构并筛选数据
CREATE TABLE new_table AS 
SELECT * FROM original_table WHERE condition;

-- 复制部分列
CREATE TABLE new_table AS 
SELECT col1, col2, col3 FROM original_table;

-- 复制空表(仅结构)
CREATE TABLE new_table AS 
SELECT * FROM original_table WHERE 1=0;

2. 通过工具界面复制

使用 SQL Developer 图形界面:

在左侧连接窗口中右键点击源表 选择 "复制" → "复制到..." 选择目标连接和方案 可以选择:
  • 仅结构
  • 结构和数据
  • 仅数据(目标表需已存在)
点击 "应用" 完成复制

3. 导出/导入方法

使用导出工具:

右键表 → 导出 选择导出格式(SQL、CSV、Excel等) 设置导出选项 在目标数据库执行导出的 SQL 文件

快速导出数据:

-- 生成插入语句
SELECT 'INSERT INTO new_table VALUES (' 
       || col1 || ', ' || col2 || ', ...' || ');'
FROM original_table;

4. 复制到不同用户/方案

-- 复制到其他用户的方案
CREATE TABLE other_user.new_table AS 
SELECT * FROM current_user.original_table;

-- 需要相应权限
GRANT SELECT ON original_table TO other_user;

5. 高级复制选项

-- 复制表结构包括约束、索引等
BEGIN
  DBMS_METADATA.SET_TRANSFORM_PARAM(
    DBMS_METADATA.SESSION_TRANSFORM,
    'SQLTERMINATOR', TRUE);

  SELECT DBMS_METADATA.GET_DDL('TABLE', 'ORIGINAL_TABLE')
  INTO :ddl FROM DUAL;

  EXECUTE IMMEDIATE :ddl;
END;
/

-- 使用 DBMS_REDEFINITION 在线重定义(大型表)
BEGIN
  DBMS_REDEFINITION.CAN_REDEF_TABLE('USER', 'ORIGINAL_TABLE');
  DBMS_REDEFINITION.START_REDEF_TABLE(
    uname => 'USER',
    orig_table => 'ORIGINAL_TABLE',
    int_table => 'INTERIM_TABLE');
  DBMS_REDEFINITION.FINISH_REDEF_TABLE(
    uname => 'USER',
    orig_table => 'ORIGINAL_TABLE',
    int_table => 'INTERIM_TABLE');
END;
/

6. INSERT INTO SELECT 复制数据

-- 前提:目标表已存在
INSERT INTO target_table 
SELECT * FROM source_table;

-- 指定列插入
INSERT INTO target_table (col1, col2, col3)
SELECT col1, col2, col3 FROM source_table;

7. 复制包括约束和索引

-- 1. 复制结构
CREATE TABLE new_table AS 
SELECT * FROM original_table WHERE 1=0;

-- 2. 手动添加约束
ALTER TABLE new_table ADD CONSTRAINT pk_new PRIMARY KEY (id);
ALTER TABLE new_table ADD CONSTRAINT fk_new FOREIGN KEY (ref_id) 
  REFERENCES other_table(id);

-- 3. 复制索引
CREATE INDEX idx_new_col ON new_table(column_name);

8. 使用 SQL Developer 的数据库复制功能

工具 → 数据库复制 选择源连接和目标连接 选择要复制的对象类型 配置复制选项 执行复制

实用技巧和注意事项

性能优化:

-- 禁用约束和索引提高插入速度
ALTER TABLE new_table DISABLE CONSTRAINT constraint_name;
ALTER INDEX index_name UNUSABLE;

-- 使用并行和NOLOGGING(生产环境慎用)
CREATE TABLE new_table NOLOGGING PARALLEL 4 AS 
SELECT /*+ PARALLEL(4) */ * FROM original_table;

-- 分批次插入大表
INSERT /*+ APPEND */ INTO new_table 
SELECT * FROM original_table WHERE ROWNUM <= 10000;

查看表空间使用情况:

-- 复制前确认表空间
SELECT tablespace_name, bytes/1024/1024 MB 
FROM user_segments 
WHERE segment_name = 'ORIGINAL_TABLE';

验证数据一致性:

-- 检查行数
SELECT COUNT(*) FROM original_table;
SELECT COUNT(*) FROM new_table;

-- 数据对比
SELECT '差异数据' AS remark, a.*
FROM (
  SELECT * FROM original_table
  MINUS
  SELECT * FROM new_table
) a;

选择建议:

  • 小表快速复制:使用 CTAS 方法
  • 复制到不同数据库:使用导出/导入工具
  • 保留完整对象结构:使用 DBMS_METADATA
  • 在线操作生产表:使用 DBMS_REDEFINITION
  • 图形化操作:使用 SQL Developer 界面工具

根据你的具体需求(是否需要数据、是否需要约束索引、表的大小等)选择合适的方法。

相关帖子
在选择技能提升类课程时,如何验证其教学方法的有效性与更新程度?
在选择技能提升类课程时,如何验证其教学方法的有效性与更新程度?
阜阳市120救护车长途跨省护送病人出院@救护车转院病人返乡,按公里收费
阜阳市120救护车长途跨省护送病人出院@救护车转院病人返乡,按公里收费
2026年高端预制菜市场呈现出哪些新的产品趋势与口味创新?
2026年高端预制菜市场呈现出哪些新的产品趋势与口味创新?
如何洗涤含有羊毛、羊绒混纺的衣物以保持其柔软手感?
如何洗涤含有羊毛、羊绒混纺的衣物以保持其柔软手感?
2026社区垃圾分类新风向:关于厨余垃圾处理的三个常见误区
2026社区垃圾分类新风向:关于厨余垃圾处理的三个常见误区
咸宁市专业网站开发建设&精准获客,多年专业建站经验
咸宁市专业网站开发建设&精准获客,多年专业建站经验
扬州市救护车转院转运回家&长途跨省救护车转运24小时电话
扬州市救护车转院转运回家&长途跨省救护车转运24小时电话
高效管理你的Linux系统: Debian操作系统常用命令指南
高效管理你的Linux系统: Debian操作系统常用命令指南
长期受噪音困扰影响休息,如何进行自我心理调节与舒缓?
长期受噪音困扰影响休息,如何进行自我心理调节与舒缓?
济南市网站建设服务%精准获客系统,高端网站开发设计
济南市网站建设服务%精准获客系统,高端网站开发设计
如果社保已经断缴了,在2026年还有没有机会进行补缴操作?
如果社保已经断缴了,在2026年还有没有机会进行补缴操作?
湛江市企业网站建设公司&做网站公司,收费标准
湛江市企业网站建设公司&做网站公司,收费标准
2026年通过哪些官方或正规的线上平台,可以查询到可靠的跨境招聘信息?
2026年通过哪些官方或正规的线上平台,可以查询到可靠的跨境招聘信息?
杭州市救护车长途跨省护送病人出院@120救护车一次多少钱
杭州市救护车长途跨省护送病人出院@120救护车一次多少钱
黄石市专业网站设计制作%定制化网站建设,小程序开发
黄石市专业网站设计制作%定制化网站建设,小程序开发
在马路上看到哪些问题可以通过随手拍上报并获得奖励?
在马路上看到哪些问题可以通过随手拍上报并获得奖励?
2026年异地销户是否支持线上办理,话费余额如何处理?
2026年异地销户是否支持线上办理,话费余额如何处理?
web面试常问http缓存解析相关
web面试常问http缓存解析相关
徐州市长途救护车出租&重症急救车出租,转院接送
徐州市长途救护车出租&重症急救车出租,转院接送
外卖骑手在等待取餐时,平台系统是如何自动识别和记录等时时间的?
外卖骑手在等待取餐时,平台系统是如何自动识别和记录等时时间的?