linux环境下如何对oracle数据库进行整库备份

来源:互联网 发布:异地备份软件 编辑:程序博客网 时间:2024/06/05 18:31

项目需求:把服务器A上的一个数据库整库备份到服务器B上

一、备份数据库

1. 远程登录到服务器A

2. 使用如下命令导出数据库:

exp  用户名/密码@ip /home/database.dmp

二、传输文件

1. 远程登录到服务器B

2. 使用如下命令将备份文件从服务器A传送到服务器B上

scp remoteUser@remoteIp:remoteFile localPath

三、创建用户和表空间

1. 切换到操作Oracle数据库

su - oracle

切换成功会提示相关数据库的实例。 

2. 切换到sqlplus操作

sqlplus "/as sysdba"

3. 创建临时表空间

create temporary tablespace user_temp 

tempfile '/home/oracle/app/oracle/oradata/orcl/user_temp.dbf'

size 50m 

autoextend on 

next 50m maxsize 20480m 

extent management local; 

 

4. 创建数据表空间 

create tablespace user_data 

logging 

datafile '/home/oracle/app/oracle/oradata/orcl/user_data.dbf'

size 50m 

autoextend on 

next 50m maxsize 20480m 

extent management local; 

 

5. 创建用户并指定表空间 

create user username identified by password  

default tablespace user_data 

temporary tablespace user_temp; 

 

6. 给用户授予权限 

grant connect,resource,dba to username;

修改表空间

 

7. 如果想修改用户默认表空间使用如下命令:

ALTER USER user名

DEFAULT TABLESPACE tablespace名;

8. 退出sqlplus

   exit

四、导入数据库:

 imp 用户名/密码@ip file=/home/database.dmpbuffer=102400000 feedback=10000  full=y

 

到这里就完成了数据库的恢复。

但是在导入的时候可能会出现如下问题:

一、导入dmp文件,报 IMP-00013: only a DBA can import a file exported by another DBA 的问题,

这篇博客http://blog.itpub.net/28758644/viewspace-1063614/给了两种解决方法:

1. 给导入用户赋予dba 权限

SQL>grant sysdba to user;

SQL>grant imp_full_database to user;

 

2.使用普通用户导出dmp 文件,(我遇到的情况是测试环境的用户都有DBA权限,没有权限revoke dba权限,导致dmp文件导出都具有DBA权限)

变通的方法是:在本地导入具有带DBA权限的dmp 文件,然后再revoke DBA权限,最后导出的dmp 文件就不具有DBA权限,普通用户也可以导入。

 

 

二、导入了大量的数据库表后发现导入错了,怎么才能快速删除大量数据库表。

解决办法可参照http://www.cnblogs.com/chshnan/archive/2012/02/07/2341694.html这篇博客给出的两种方法

1、如果有删除用户的权限,则可以:

drop user user_name cascade;

加了cascade就可以把用户连带的数据全部删掉。

删除后再创建该用户。

--创建管理员用户

create user 用户名 identified by 密码 defaulttablespace space_data(表空间名称) temporary tablespace space_temp(临时表空间名称);

--授权

grant connect,dba to 用户名;

--修改限额

ALTER USER "用户名"QUOTA UNLIMITED ON SPACE_DATA(表空间名称);

--查看所有用户对象

select uo.object_name,uo.object_type fromuser_objects uo where uo.object_type<>'LOB' order by uo.object_type desc

2、如果没有删除用户的权限,则可以执行:

select 'drop table '||table_name||';' fromcat where table_type='TABLE'

将会输出一批删除表的sql语句,这些SQL语句执行一下就可以了。(需要有drop table的权限)


0 0
原创粉丝点击