linux环境下如何对oracle数据库进行整库备份
扫描二维码
随时随地手机看文章
项目需求:把服务器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的权限)