oracle数据库迁移相关SQL语句「终于解决」

oracle数据库迁移相关SQL语句「终于解决」本人是使用PLSQL工具来做数据库迁移,示例是将同一个数据库的apps用户的数据迁移至sccsrm用户,它们都是在同一个数据库里。 数据库迁移常见的一种方式是使用命令将某个用户的所有数据导出,再将其…

oracle数据库迁移相关SQL语句

    数据库迁移常见的一种方式是使用命令将某个用户的所有数据导出,再将其导入新用户中。

    创建用户需要DBA权限。

sqlplus /nolog
conn /as sysdba

代码100分

1、创建用户及授权,一般都是需要新建表空间和临时表空间

代码100分----删除用户
drop user sccsrm cascade;

----临时表空间
create temporary tablespace SCCSRM_TMP_TS
tempfile "/u01/app/oracle/oradata/SRM/datafile/SCCSRM_TMP_TS.dbf"      
size 50m                                                     
autoextend on                                              
next 50m maxsize 20480m                            
extent management local;

----数据表空间
create tablespace SCCSRM_DATA_TS
logging
datafile "/u01/app/oracle/oradata/SRM/datafile/SCCSRM_DATA_TS.dbf"      
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;

----创建用户sccsrm
create user sccsrm identified by sccsrm default tablespace SCCSRM_DATA_TS temporary tablespace SCCSRM_TMP_TS;

----表空间授权给sccsrm
alter user sccsrm quota unlimited on SCCSRM_DATA_TS;

----授权sccsrm
grant connect,resource to sccsrm;

---查看表空间的位置
select * from dba_data_files;

---修改表空间dbf文件,设置成默认每次增加50M,无限大——————当出现表空间不足时
alter database datafile "/u01/app/oracle/oradata/SRM/datafile/SCCSRM_DATA_TS.dbf" autoextend on next 50M maxsize unlimited;

2、数据库迁移步骤,需要准备导入的Excel的表清单


-----1、创建临时表的表sccsrm.TABLE_NAME_TEMP
create table sccsrm.TABLE_NAME_TEMP
(
  table_name VARCHAR2(100)
)
tablespace SCCSRM_DATA_TS;

-----2、查询当前用户apps所有表名,将其导出为Excel,用于sccsrm用户的临时表sccsrm.table_name_temp的导入数据
select t.table_name from user_tables t order by t.TABLE_NAME;

-----将导出的表清单Excel导入sccsrm.table_name_temp
-----3、表sccsrm.TABLE_NAME_TEMP数据去空
update sccsrm.table_name_temp t
set t.table_name=trim(t.table_name);


-----4、在apps用户登录下,授权表的查询权限给sccsrm用户
-----授权限给sccsrm的查询权限
declare
  cursor vdata is select t.table_name from sccsrm.table_name_temp t order by t.TABLE_NAME;
  --声明变量,记录一行数
  v          vdata%rowtype;
  v_sql varchar2(200);
begin
  --打开游标
   open vdata;
   --循环遍历取数据
   loop
     fetch vdata into v;
     exit when vdata%NOTFOUND;
     v_sql := "grant select on apps."||v.table_name||" to sccsrm";
     execute immediate v_sql;
   end loop;  
   --关闭游标
   close vdata;
end;

-----5、复制表数据——将apps用户下的表数据迁移至sccsrm用户下
declare
  cursor vdata is select t.table_name from sccsrm.table_name_temp t where not exists(select tt.TABLE_NAME from user_tables tt where tt.TABLE_NAME=t.table_name) order by t.TABLE_NAME;
  --声明变量,记录一行数
  v          vdata%rowtype;
  v_sql varchar2(600);
  n number;
begin
  --打开游标
   open vdata;
   --循环遍历取数据
   loop
     fetch vdata into v;
     exit when vdata%NOTFOUND;
     /*dbms_output.put_line(v.table_name);*/
     v_sql := "create table sccsrm."||v.table_name||" as select * from apps."||v.table_name;
     execute immediate v_sql;
   end loop;  
   --关闭游标
   close vdata;
end;

-----6、查看该用户apps下的所有索引
select t.index_name,t.index_type,t.table_name from user_indexes t order by t.table_name;
-----查询出apps所有索引,将其导出为Excel,再将Excel数据复制到PLSQL,再将其进行修改,以便在sccsrm用户执行
SELECT dbms_lob.substr(dbms_metadata.get_ddl("INDEX", INDEX_NAME)) || ";" from dba_indexes where owner = "APPS" and index_type="NORMAL";


-----7、在apps用户登录下,回收给sccsrm的查询权限
declare
  cursor vdata is select t.table_name from sccsrm.table_name_temp t order by t.TABLE_NAME;
  --声明变量,记录一行数
  v          vdata%rowtype;
  v_sql varchar2(200);
begin
  --打开游标
   open vdata;
   --循环遍历取数据
   loop
     fetch vdata into v;
     exit when vdata%NOTFOUND;
     v_sql := "revoke select on apps."||v.table_name||" from sccsrm";
     execute immediate v_sql;
   end loop;  
   --关闭游标
   close vdata;
end;


-----8、在apps用户登录下,查询出apps用户下所有序列
SELECT "create sequence sccsrm."||SEQUENCE_NAME||" minvalue "||MIN_VALUE||" maxvalue "||MAX_VALUE||
" start with "||LAST_NUMBER||" increment by "||INCREMENT_BY||" cache "||" 100;"   
  FROM DBA_SEQUENCES   
WHERE SEQUENCE_OWNER = "APPS";
-----查看当前用户的所有序列
select * from user_sequences t;


-----9、在apps用户登录下,删除表及其数据——apps用户的旧数据,强烈建议进行数据备份再执行删除操作,避免误操作造成数据丢失现象
declare
  cursor vdata is select t.table_name from sccsrm.table_name_temp t order by t.TABLE_NAME;
  --声明变量,记录一行数
  v          vdata%rowtype;
  v_sql varchar2(600);
begin
  --打开游标
   open vdata;
   --循环遍历取数据
   loop
     fetch vdata into v;
     exit when vdata%NOTFOUND;
     /*dbms_output.put_line(v.table_name);*/
     v_sql := "drop table apps."||v.table_name;
     execute immediate v_sql;
   end loop;  
   --关闭游标
   close vdata;
end;
代码100分---查看空表
select "alter table "||table_name||" allocate extent;"from user_tables WHERE SEGMENT_CREATED="NO";
select * from user_indexes WHERE SEGMENT_CREATED="NO";
select * from user_lobs where segment_created="NO";
select count(*) from v$process --当前的连接数
select value from v$parameter where name = "processes" --数据库允许的最大连接数

---修改最大连接数:
alter system set processes = 300 scope = spfile;

---重启数据库:
shutdown immediate;
startup;

---查看当前有哪些用户正在使用数据
SELECT osuser, a.username,cpu_time/executions/1000000||"s", sql_fulltext,machine 
from v$session a, v$sqlarea b
where a.sql_address =b.address order by cpu_time/executions desc;

---查看oracle的性能
show parameter sga;

注意事项:迁移数据时,需要先迁移表结构、表数据,表索引,function及view、触发器,最后是表序列,因为在迁移数据库的过程中,旧数据库的序列有可能还在新增,最后才迁移序列可以避免新数据的序列冲突。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8727.html

(0)
上一篇 2023-02-22 20:30
下一篇 2023-02-23

相关推荐

  • 灵活运用SQL Server2008 SSIS变量「建议收藏」

    灵活运用SQL Server2008 SSIS变量「建议收藏」在SSIS开发ETL(Extract-Transform-Load),数据抽取、转换、装载的过程。我们需要自己定义变量 一、SSIS变量简介 SSIS(SQL Server Integration S

    2022-12-29
    101
  • sql初学者笔记 语法基础pdf_sql存储过程语法

    sql初学者笔记 语法基础pdf_sql存储过程语法常见注释 — 很少支持 #行内注释 /**/段落注释 基础语法 SELECT 检索数据 语法 作用 例子 释义 select 查找列,并返回行 select prod_name from produ

    2023-03-15
    95
  • MySQL性能分析(Explain)

    MySQL性能分析(Explain)更多知识,请移步我的小破站:http://hellofriend.top 1. 概述 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查

    2023-03-05
    115
  • 赞!7000 字学习笔记,一天搞定 MySQL

    赞!7000 字学习笔记,一天搞定 MySQLMySQL数据库简介 MySQL近两年一直稳居第二,随时有可能超过Oracle计晋升为第一名,因为MySQL的性能一直在被优化,同时安全机制也是逐渐成熟,更重要的是开源免费的。 MySQL是一种关系数

    2023-03-18
    111
  • 深度剖析Python中的get方法

    深度剖析Python中的get方法Python是一门高级编程语言,它提供了丰富的工具和库,使得开发人员能够快速开发出高效的应用程序。其中一个非常有用的工具就是get方法。在Python中,get方法是字典(dictionary)类中的常用方法之一,可以用于获取字典中指定元素的值。get方法的作用非常广泛,本文将从多个方面阐述get方法的使用,更好地帮助读者了解和掌握这个强大而有用的方法。

    2024-03-18
    27
  • 腾讯资深架构带你深入MyBatis技术原理与实战[通俗易懂]

    腾讯资深架构带你深入MyBatis技术原理与实战[通俗易懂]【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> 前言 本书主要讲解了MyBatis 的应用。从目前的情况来看,国内图书市场上没有介绍 MyBatis的书籍,有的只是官方的API…

    2023-02-03
    108
  • redis 主从复制[通俗易懂]

    redis 主从复制[通俗易懂]redis 主从复制 master 节点提供数据,也就是写。slave 节点负责读。 不是说master 分支不能读数据,也能只是我们希望将读写进行分离。 slave 是不能写数据的,只能处理读请求

    2023-03-11
    86
  • springboot2集成cas 单点登录_java properties

    springboot2集成cas 单点登录_java propertiesCouchbase 虽然是MongoDB最有潜力的竞争对手,但是其在数据库方面的开源程度还远远不够,很多高级特性都没有开放出来。目前虽然被SpringBoot加持有了一些光环,但是其文档和代码注释方…

    2023-03-24
    104

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注