突然想试着写写博客,首选ITPUB。碰巧遇上ITPUB正在进行一次地震般的升级,空间和博客不能正常登录。
看来还是和CSDN比较有缘呢。但愿CSDN博客现在会比较像样一点,不会再时不时连不上吧
第一篇。就把昨晚远程支持的一个案例缩减记录一下
现场的要求是这样的:
为了提高数据库性能,有几个用户需要重建,清掉原有的数据保留表结构。由于这些用户和数据近期还需要使用,因此要将这几个用户的表结构等导入到几个新建的用户下。
需要导出的数据库的表结构如下5个用户:
dyaccountmanage20 dycommondatabase20 dylogeventmanage20 dyuserverifydb20 dynetman20
需要新建的5个用户:
dyaccountman2011 dycommondatabase2011 dylogeventmana2011 dyuserverify2011 dynetmanage2011
我的方案如下:
以expdp先导出这几个用户下的所有数据,兼作备份之用。然后将其除了表数据以外,导入到新建的用户中。具体步骤如下
先创建dmp文件存放的路径
SQL> create directory expdpdir as '/users/dbbak';
导出数据:
expdp system/*** directory=expdpdir dumpfile=expdpdata_%U.dmp logfile=expdp.log schemas=dyaccountmanage20,dycommondatabase20,dylogeventmanage20,dyuserverifydb20,dynetman20 parallel=4
使用了并行导出,并行度为4
创建对应的表空间
create tablespace dyaccountman2011;
create tablespace dycommondatabase2011;
create tablespace dylogeventman2011;
create tablespace dyuserverify2011;
create tablespace dynetmanage2011;
执行导入
impdp system/**** directory=expdpdir dumpfile=expdpdata_%U.dmp logfile=impdp.log exclude=table_data remap_tablespace=dyaccountmanage20:dyaccountman2011,dycommondatabase20:dycommondatabase2011,dylogeventmanage20:dylogeventman2011,dyuserverifydb20:dyuserverify2011,dynetman20:dynetmanage2011 remap_schema=dyaccountmanage20:dyaccountman2011,dycommondatabase20:dycommondatabase2011,dylogeventmanage20:dylogeventman2011,dyuserverifydb20:dyuserverify2011,dynetman20:dynetmanage2011 parallel=4
这里使用了并行度为4的并行导入,通过remap_tablespace和remap_schemas参数将表空间和用户导入到不同的目标中。exclude=table_data指定了不导入的对象类型,这里是表数据。在10.2.0.2中有个bug,需要将table_statistics也排除在导入的数据类型之外,否则可能会报错。
到了这一步,基本就完成了。但还有一个地方需要修改:由于手动指定了导入的用户,这些用户的密码需要重新设定,否则应用程序将无法连接。
这里写了一个存储过程来将这些用户的密码改成与用户名相同的值
set serverout on
begin
for x in(select username from dba_users where username like '%2011')loop
execute immediate 'alter user '||x.username||' identified by '||******;
dbms_output.put_line(x.username||' has been altered successfully');
end loop;
end;
/
回归的第一篇博客,小小测试一下功能。还不错,比公司的破BBS好用多了