首页 > 数据库 >7、oracle迁移某个用户的表到另外一个用户里

7、oracle迁移某个用户的表到另外一个用户里

时间:2023-12-05 16:45:50浏览次数:56  
标签:NAME CONSTRAINT 表到 T2 用户 AU oracle TABLE odsuser

目录

oracle迁移某个用户的表到另外一个用户里

1、创建新用户

1.1、表空间创建

--创建表空间
CREATE TABLESPACE ODS_SPACE LOGGING DATAFILE '/oracle/oradata/DEV/ODS_SPACE.DBF' SIZE 32M REUSE AUTOEXTEND ON NEXT  200M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;

--创建临时表空间
CREATE TEMPORARY TABLESPACE TEMP_ODS_SPACE TEMPFILE '/oracle/oradata/DEV/temp_ods_space.DBF' SIZE 50M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;  

1.2、创建新用户

CREATE USER odsuser IDENTIFIED BY BmikeXO4Xr account unlock DEFAULT TABLESPACE ODS_SPACE TEMPORARY TABLESPACE TEMP_ODS_SPACE;

1.3、授权

--登录和资源权限(?无建表等权限,需要另外授权)
grant connect to odsuser;
grant resource to odsuser;

--其它结构对象操作权限
grant create table to odsuser;
grant create job to odsuser;
grant create synonym to odsuser;
grant create view to odsuser;
grant create session to odsuser;
grant UNLIMITED TABLESPACE to odsuser;
grant CREATE DATABASE LINK to odsuser;
grant select any table to odsuser;
--测试环境额外授权
GRANT debug any procedure, debug connect session to odsuser;

--导出权限
grant read,write on directory dmps to odsuser;

2、表数据迁移

2.1、迁移前后统计某个用户表结构对象信息

SELECT object_type,
       COUNT(object_name)
  FROM user_objects
 WHERE upper(object_name) LIKE '%ODS%'
   AND upper(object_name) NOT LIKE upper('%TEMP%')
 GROUP BY object_type
 ORDER BY 2;

2.2、序列迁移,先执行获取创建语句

SELECT 'create sequence ' || 'odsuser' || '.' || SEQUENCE_NAME || ' start with ' ||
       LAST_NUMBER || ' maxvalue ' || MAX_VALUE || ' minvalue ' || MIN_VALUE ||
       ' increment by ' || INCREMENT_BY || ' cache ' || CACHE_SIZE || ' ' ||
       DECODE(CYCLE_FLAG, 'N', 'NOCYCLE', 'CYCLE') || ' ' ||
       DECODE(ORDER_FLAG, 'N', 'NOORDER', 'ORDER') || ' ;' AS "create_scripts",
       'drop sequence ' || 'dmuser' || '.' || SEQUENCE_NAME || ';' AS "drop_scripts"
  FROM USER_SEQUENCES
 WHERE CACHE_SIZE != 0
   AND UPPER(SEQUENCE_NAME) LIKE UPPER('%ODS%');

odsuser优先执行创建序列,根据每个不同环境获取到序列开始值不一致

2.3、表迁移

SELECT 'create table odsuser.' || T.TABLE_NAME || ' as select * from dmuser.' ||
       T.TABLE_NAME || ';' AS CREATE_SQL,
       'drop table dmuser.' || T.TABLE_NAME || ';' AS DROP_SQL
  FROM USER_TABLES T
 WHERE UPPER(T.TABLE_NAME) LIKE UPPER('%ODS%')
   AND UPPER(TABLE_NAME) NOT LIKE UPPER('%TEMP%');

2.4、主键约束、唯一键约束、外键约束迁移

SELECT AU.TABLE_NAME,
       AU.CONSTRAINT_NAME,
       AU.CONSTRAINT_TYPE,
       DECODE(AU.CONSTRAINT_TYPE,
              'P',
              ('ALTER TABLE odsuser.' || AU.TABLE_NAME || ' ADD CONSTRAINT ' ||
              AU.CONSTRAINT_NAME || ' PRIMARY KEY (' || LISTAGG(CU.COLUMN_NAME, ',') WITHIN
               GROUP(ORDER BY CU.COLUMN_NAME) || ');'),
              'U',
              ('ALTER TABLE odsuser.' || AU.TABLE_NAME || ' ADD CONSTRAINT ' ||
              AU.CONSTRAINT_NAME || ' Unique (' || LISTAGG(CU.COLUMN_NAME, ',') WITHIN
               GROUP(ORDER BY CU.COLUMN_NAME) || ');'),
              AU.CONSTRAINT_TYPE || '-其它待处理') AS CREATE_SQL
  FROM USER_CONS_COLUMNS CU, USER_CONSTRAINTS AU
 WHERE CU.CONSTRAINT_NAME = AU.CONSTRAINT_NAME
   AND AU.CONSTRAINT_TYPE IN ('P', 'U', 'R') --P-主键,U-唯一键,R-外键
   AND UPPER(AU.TABLE_NAME) LIKE UPPER('%ODS%')
   AND UPPER(AU.TABLE_NAME) NOT LIKE UPPER('%TEMP%')
 GROUP BY AU.TABLE_NAME, AU.CONSTRAINT_NAME, AU.CONSTRAINT_TYPE
 ORDER BY AU.TABLE_NAME ASC, AU.CONSTRAINT_NAME ASC;

2.5、pck与视图迁移

如工具类ods_pack_commonutils

2.6、索引迁移(包含约束)

SELECT T2.TABLE_NAME,
       T2.INDEX_NAME,
       LISTAGG(T3.COLUMN_NAME, ',') WITHIN GROUP(ORDER BY T3.COLUMN_POSITION) INDEX_COLUMN,
       'call ods_pack_commonutils.DROP_TABLE_INDEX(''' || T2.INDEX_NAME || ''');' DROP_INDEX,
       'call ods_pack_commonutils.ADD_TABLE_INDEX (''' || T2.TABLE_NAME || ''',''' ||
       LISTAGG(T3.COLUMN_NAME, ',') WITHIN GROUP(ORDER BY T3.COLUMN_POSITION) || ''',''' || T2.INDEX_NAME || ''');' INDEX_SQL
  FROM USER_INDEXES T2, USER_IND_COLUMNS T3
 WHERE T2.INDEX_NAME = T3.INDEX_NAME
   AND T2.TABLE_NAME = T3.TABLE_NAME
   AND T2.TABLE_NAME LIKE '%ODS%'
   AND UPPER(T2.TABLE_NAME) NOT LIKE UPPER('%TEMP%')
   AND T2.CONSTRAINT_INDEX = 'NO' --YES-约束索引标识, NO-非约束索引
      --AND t2.status = 'VALID'
   AND T3.COLUMN_NAME NOT LIKE '%SYS%'
 GROUP BY T2.INDEX_NAME, T2.TABLE_NAME
 ORDER BY T2.TABLE_NAME;

2.7、触发器迁移

SELECT 'call dm_pack_commonutils.DROP_TRIGGER(''' || TRIGGER_NAME || ''');' AS DMUSER,
       'call ods_pack_commonutils.DROP_TRIGGER(''' || TRIGGER_NAME || ''');' AS ODSUSER
  FROM ALL_TRIGGERS
 WHERE TABLE_NAME IN (SELECT 'ODS_' || BIZ_CODE FROM DMUSER.DM_CONF_TABLE)
   AND OWNER = UPPER('dmuser');

2.8、创建同义词(在原用户执行,可省略)

是根据DM_CONF_TABLE动态查询的表名

SELECT 'create or replace synonym ods_' || LOWER(BIZ_CODE) || ' for odsuser.ods_' ||
       LOWER(BIZ_CODE) || ';'
  FROM DM_CONF_TABLE;

3、删除原用户的数据

3.1、删除旧序列

drop sequence dmuser.ODS_SEQ_table_name;

3.2、删除原表

drop table dmuser.ODS_table_name ;

3.3、删除旧触发器

drop TRIGGER dmuser.ODS_TR_table_name;

标签:NAME,CONSTRAINT,表到,T2,用户,AU,oracle,TABLE,odsuser
From: https://www.cnblogs.com/lgxdev/p/17877599.html

相关文章

  • 18、oracle11g与19c的区别
    目录oracle11g与19c的区别1、数据存储结构2、查询优化3、安全性4、管理工具oracle11g与19c的区别1、数据存储结构Oracle11g中的存储结构是基于分区表的基础上,使用B树索引来支持数据的查询。而Oracle19c中则使用了新的存储引擎,即Oracle数据库自带的多模型数据库存储引......
  • Linux 用户管理:解析用户与组概念,掌握用户/组管理技巧
    在Linux操作系统中,用户管理是系统管理员日常工作中不可或缺的一部分。有效的用户管理有助于确保系统的安全性、可靠性和可维护性。本文将深入探讨Linux中用户与组的概念,以及如何有效地进行用户和组的管理。用户与组的概念在Linux系统中,每个用户都有一个唯一的用户标识符(UserID,......
  • oracle通配符大全
    用于where比较条件的有:等于:=、<、<=、>、>=、<>>,<:大于,小于>=.<=:大于等于,小于等于=:等于!=,<>,^=:不等于包含:in、notinexists、notexists范围:between...and、notbetween....and匹配测试:like、notlikeNull测试:isnull、isnotnull布尔链接:and、or、notOracle通......
  • 钡铼技术助力Thingsboard平台国内发展,特价网关为用户带来超值体验
    钡铼技术作为Thingsboard官方合作伙伴,致力于推动TB平台在国内的推广和应用。为了让国内用户更好的体验Thingsboard平台,钡铼技术联合Thingsboard中文网推出一批特价网关,不为赚钱只为交个朋友!钡铼技术Thingsboard硬网关南向可以采集PLC、Modbus、楼宇BACnet、电力IEC103、104、DL/......
  • CentOS7 安装 Oracle12c 详解
    1.安装前准备中科大镜像站下载完整版CentOS7 Indexof/centos/7/isos/x86_64/(ustc.edu.cn)安装时设置硬盘大小40G,选择GNOME桌面安装,勾选必要的一些东西安装时选择只装root用户重启后要求配置一个用户,设置用户名为oracle下载历史版本Oracle数据库 https://edelivery.o......
  • 界面控件DevExpress WPF导航组件,助力升级应用程序用户体验!(上)
    DevExpressWPF的SideNavigation(侧边导航)、TreeView、导航面板组件能帮助开发者在WPF项目中添加Windows样式的资源管理器栏或OutlookNavBar(导航栏),DevExpressWPFNavBar和Accordion控件包含了许多开发人员友好的功能,专门设计用于帮助用户构建极佳的应用功能。P.S:DevExpressWPF......
  • 如何记录SpringSecurity6.1中用户登录行为
    替换UsernamePasswordAuthenticationFilter类1.pom.xml<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId></dependency><plugin>......
  • Day19 Java 流程控制01:用户交互Scanner
    Java流程控制01:用户交互ScannerScanner对象之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类:Scanner类,可以通过它来获取用户的输入基本语法:Scannerscanner=newScanner(System.in);通过Scanner类的next()与nextLine()方......
  • MySQL系列之读写分离架构——Atlas介绍、安装配置、Atlas功能测试、生产用户要求、Atl
    文章目录1.Atlas介绍2.安装配置3.Atlas功能测试4.生产用户要求5.Atlas基本管理6.自动分表7.关于读写分离建议1.Atlas介绍Atlas是由Qihoo360,Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy0.8.2版本的基础上,对其......
  • uniapp获取用户信息
    新接口getUserProfileFn内置login,如果必须要login返回的参数要隔离开vue3书写要对按钮配置属性<button@click="logintou"data-eventsync="true"class="main-login-bottom">授权登录</button>——————————————————constapp=getApp()exportletloginFn......