Oracle导出导入

一、创建用户并授权

1. 进去cmd登录sysdba账号

sqlplus/nolog

conn/ as sysdba

2. 创建临时表空间

create temporary tablespace test_temp tempfile 'D:\oradata\test\TEST_TEMP.dbf' size 100M autoextend on next 50M maxsize 20480M;

3. 创建表空间

create tablespace test datafile 'D:\oradata\test\TEST.dbf' size 1024M autoextend on next 50M maxsize unlimited EXTENT MANAGEMENT local autoallocate segment space management auto;

4. 创建用户授予表空间

create user test_user identified by test_pwd default tablespace test temporary tablespace test_temp profile default;

5. 给用户授予权限

(1) grant dba to test_user;//给用户名授予dba权限,一般情况不给dba权限

(2) grant create session to test_user;/授予⽤户创建session的权限,即登陆权限

(3) grant connect,resource to test_user;

(4) 执⾏上⾯的sql语句后⽤户包括的权限

a. CONNECT⾓⾊:

  --是授予最终⽤户的典型权利,最基本的

        ALTER SESSION --修改会话

        CREATE CLUSTER --建⽴聚簇

        CREATE DATABASE LINK --建⽴数据库链接

        CREATE SEQUENCE --建⽴序列

        CREATE SESSION --建⽴会话

        CREATE SYNONYM --建⽴同义词

        CREATE VIEW --建⽴视图

b. RESOURCE⾓⾊:

  --是授予开发⼈员的

        CREATE CLUSTER --建⽴聚簇

        CREATE PROCEDURE --建⽴过程

        CREATE SEQUENCE --建⽴序列

        CREATE TABLE --建表

        CREATE TRIGGER --建⽴触发器

        CREATE TYPE --建⽴类型

6. 校验用户名密码是否永不过期

SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';

如果结果显示 180 天 请执行一下语句

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

二、导出Oracle数据库dmp文件

1. 检查空表

导出之前先检查先处理没有数据的空表(Oracle 空表无法导出)

select table_name from user_tables where NUM_ROWS=0; --查询是否有空表

select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null; --拼接处理空表语句

将查询出来拼接好的处理语句复制到新SQL窗口执行

2. 执行导出语句

以管理员运行cmd命令行,执行以下命令并等待执行完成

exp test_user/test_pwd@ORCL file=D:\dmp\test.dmp owner=test_user log=D:\dmp\ZWWHH20220528_DAOCHU.log direct=y

三、导入Oracle数据库dmp文件

1. 复制文件

将第二步中导出的文件复制到需要导入Oracle数据库的服务器上

2. 执行导入语句

以管理员运行cmd命令行,执行以下命令并等待执行完成

imp test_user/test_pwd@ORCL touser=test_user tablespaces=test file=D:\dmp\test.dmp full=y ignore=y

四、导入之后问题处理

1. 表空间修改

导入之后表空间需要修改成我们第一步创建的表空间

select * from user_tables; --查询当前所有表的表空间

--拼接修改表空间语句,查出来的数据中存在多个表空间的时候TABLESPACE_NAME条件用IN

SELECT 'alter table '||TABLE_NAME||' move tablespace test;' FROM USER_TABLES WHERE TABLESPACE_NAME = 'USERS';

将查询出来拼接好的修改语句复制到新SQL窗口执行

2. 索引处理

导入之后可能会导致索引失效需要重新处理索引

select index_name ,status from user_indexes where status = 'UNUSABLE'; --查询失效索引

select 'alter index ' || index_name || ' rebuild;' from user_indexes where Status = 'UNUSABLE'; --拼接重建索引语句

将查询出来拼接好的重建索引语句复制到新SQL窗口执行

3. 索引空间修改

导入之后索引表空间需要修改成我们第一步创建的表空间

SELECT * FROM DBA_INDEXES WHERE TABLE_OWNER = 'TEST_USER' AND INDEX_TYPE = 'NORMAL' ; --查询当前所有表的表空间

--拼接修改索引表空间语句,查出来的数据中存在多个表空间的时候TABLESPACE_NAME条件用IN

SELECT 'ALTER INDEX '|| INDEX_NAME || ' REBUILD TABLESPACE rmyy_index;' FROM DBA_INDEXES WHERE TABLE_OWNER = 'TEST_USER' AND INDEX_TYPE = 'NORMAL' AND TABLESPACE_NAME = 'USERS';

将查询出来拼接好的修改语句复制到新SQL窗口执行

4. 批量编译存储过程和函数

--拼接批量编译函数的语句

SELECT OBJECT_NAME, 'alter function ' || OBJECT_NAME || ' compile;' FROM ALL_OBJECTS WHERE STATUS = 'INVALID' AND OBJECT_TYPE ='FUNCTION' AND OWNER = UPPER('test_user');

将查询出来拼接好的语句复制到新SQL窗口执行

--拼接批量编译函数的语句

SELECT OBJECT_NAME, 'alter procedure ' || OBJECT_NAME || ' compile;' FROM ALL_OBJECTS WHERE STATUS = 'INVALID' AND OBJECT_TYPE ='PROCEDURE' AND OWNER = UPPER('test_user');

将查询出来拼接好的语句复制到新SQL窗口执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿够钟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值