最近做了个oracle数据库迁移,有几种方式,我来列举几种:1.exp/imp 对象导出
2.expdp/impdp 数据泵导入导出
3.plsql的sql导出
4.navicat的数据传输(带数据迁移)
5.navicat的数据结构同步
刚刚罗列的5种,前几年网上常见的基本是1,2俩种,他俩的操作都是基于命令符操作,需要对命令有一定的了解。
而3,4,5这三种,是小白式窗口点击即可。
这里带来的是窗口直接点击的几种:
plsql----工具(tool)----用户对象(user object) (支持分区表等复杂表结构,exp不支持导出分区表)用户选中你要导出的用户
输入要保存本地的地址,点击导出。(不选择表默认是全表表结构导出)
然后在把脚本直接复制进plsql执行,复杂的数据库不要使用“导入表”这个功能,否则会丢失部分表或存储过程。
navicat----工具----结构同步: (只导出表结构,不支持分区表)源选择连接的数据库,目标选择要迁移到保存的数据库
选择表和存储过程(需要哪些就选哪些),点击部署
注:如果需要查询数据库表用户给其他用户授权过什么权限。查询sql如下:(结果集即对应权限sql)select 'GRANT '||privilege||' ON ' || table_name || ' to '||grantee||';' from user_tab_privs u
where u.owner='oracle用户名'
group by u.privilege,u.grantee,u.owner,u.table_name,u.grantor
order by u.grantee;
一些优化排查的sql:--查看被锁的表
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
--查看那个用户那个进程照成死锁
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
--查出锁定表的sid,s.serial#
SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,
s.terminal, s.logon_time, l.type
FROM v$session s, v$lock l
WHERE s.sid = l.sid
and s.terminal='WURAO'
AND s.username IS NOT NULL
ORDER BY sid;
--杀掉占用进程sid,serial#
alter system kill session 'sid,serial#';
--查看表数量
select u.TABLE_NAME,u.NUM_ROWS from user_tables u
--查看连接数
select * from v$session;
--查看并发连接数
select * from v$session where status='ACTIVE';
--查找工作空间的路径
select * from dba_data_files;
--添加表空间:
alter tablespace CDI_DATA_TBS add datafile '/u01/app/oracle/oradata/hcctest3/CDI_DATA_TBS_add01.dbf' size 1000M;
1.查看用户的连接状态
select username,sid,serial# from v$session where username='GUI';
2.找到要删除用户的sid和serial并杀死
alter system kill session'74,1648';
3.删除用户
drop user cdi cascade;