ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 数据库搬移表空间(从chicago server搬移到wilson server)

数据库搬移表空间(从chicago server搬移到wilson server)

原创 Linux操作系统 作者:it-msxq 时间:2012-01-10 21:03:44 0 删除 编辑

这是一个生产数据库的实际操作

***按照一步步的仔细认真的操作 保证整个操作是成功的***

-- 查看表空间名称、查看数据文件的路径和数据文件名称等

select t.NAME AS "tablespace_name",

       f.NAME AS "filename",

       f.STATUS,

       t.BIGFILE,

       f.BYTES

  from v$tablespace t

 inner join v$datafile f on t.TS# = f.TS#;

-- 查看users表空间的信息

select * from dba_tables where tablespace_name = 'USERS';

-- 查看users表空间的用户名

select distinct owner from dba_tables where tablespace_name = 'USERS';

-- 查看users表空间的所有表

select count(*) from dba_tables where tablespace_name = 'USERS';

-- 查看数据库中正在使用的用户名

select username, account_status

  from dba_users

 where account_status = 'OPEN';

-- 查看数据库的总大小

select round(sum(space)) all_space_m

  from (select sum(bytes) / 1024 / 1024 space

          from dba_data_files

        union all

        select nvl(sum(bytes) / 1024 / 1024, 0) space

          from dba_temp_files

        union all

        select sum(bytes) / 1024 / 1024 space from v$log);

-- 查看各个表空间的大小

select a.tablespace_name,

       round((a.maxbytes / 1024 / 1024), 2) "sum MB",

       round((a.bytes / 1024 / 1024), 2) "datafile MB",

       round(((a.bytes - b.bytes) / 1024 / 1024), 2) "used MB",

       round(((a.maxbytes - a.bytes + b.bytes) / 1024 / 1024), 2) "free MB",

       round(((a.bytes - b.bytes) / a.maxbytes) * 100, 2) "percent_used"

  from (select tablespace_name, sum(bytes) bytes, sum(maxbytes) maxbytes

          from dba_data_files

         where maxbytes != 0

         group by tablespace_name) a,

       (select tablespace_name, sum(bytes) bytes, max(bytes) largest

          from dba_free_space

         group by tablespace_name) b

 where a.tablespace_name = b.tablespace_name

 order by ((a.bytes - b.bytes) / a.maxbytes) desc;

/*

在迁移chicago服务器上USERS表空间的时候由于该表空间下有一下用户msxq,tony用户;

移动的目标位于wilson服务器上,由于该数据库中存在USERS表空间 ,users表空间是数据库默认表空间;

如果删除users表空间会报错;做一下处理:

如果表空间在某个用户下,要建立相应的用户

*/

-- 在wilson server上创建用户

create user msxq identified by xinan;

create user tony identified by hangan;

grant dba, resource, connect to msxq, tony;

grant create view to msxq, tony;

-- 在wilson server上创建数据库默认表空间

create tablespace bj datafile '/home/oracle/oracle/product/10.2.0/oradatawilson/bj.dbf'

        size 10M extent management local autoallocate segment space management auto;

-- 在wilson server上修改数据库的默认表空间为bj

alter database default tablespace bj;

-- 在wilson server上删除users表空间 去表空间路径下看相应的数据库删除没有,如果没有手动删除

drop tablespace users including contents and datafiles;

rm –rf user01.dbf

 

-- 在chicago上执行移动users表空间的操作

/*

在搬移表空间之前,为了确保特定表空间集合可以被搬移,必须首先检查表空间集合是否为自包含的,

通过执行包DBMS_TTS的过程TRANSPORT_SET_CHECK可以完成这项任务。当执行了该过程后,

系统会将违反自包含集合的信息写入到临时表transport_set_violations中。查询如果没有任何信息,

说明表空间集合是自包含的,否则会返回违反自包含表空间集合的详细信息。执行该过程,

必须有EXECUTE_CATALOG_ROLE角色。实例如下:

*/

execute sys.dbms_tts.transport_set_check('users', true);

-- 如果没有任何输出说明是自包含表空间,如果有输出,请认真做处理

select * from transport_set_violations;

-- 生成要搬移的表空间集合。必须首先将所有要搬移的表空间转变为只读状态,确保其内容不会发生任何改变

alter tablespace bj read only; -- 要求用户具有SYSDBA权限

-- 查看目录为:

[oracle@&& ~]pwd

 /home/oracle

-- 导出users表空间所有对象,需要转义字符在Linux和Unix上

[oracle@&& ~]$ exp \'/ as sysdba\' TRANSPORT_TABLESPACE=y tablespaces= users file=/home/oracle/exp_users.dmp log=/home/oracle/exp_users_chicago.log

--进行打包

[oracle@&& ~]$ tar -zvcf exp_users.dmp.tar.gz exp_users.dmp

-- 传送转储文件和数据文件到目标数据库(从chicago传送到wilson上)

[oracle@&& ~]$scp exp_users.dmp.tar.gz 192.168.132,11:/home/oracle/

[oracle@&& ~]$scp /路径/user01.dbf 192.168.132.11:/home/oracle/oracle/product/10.2.0/oradata/wilson/

-- 在wilson上操作:

-- 解压缩包

[oracle@&& ~]$tar -zvxf exp_users.dmp.tar.gz

--执行导入操作:

[oracle@&& ~]$imp '/ as sysdba\' TRANSPORT_TABLESPACE = y file =/home/oracle/exp_users.dmp datafiles =/home/oracle/oracle/product/10.2.0/oradata/wilson/users01.dbf log=/home/oracle/imp_users_wilson.log

--如果执行DML或DDL操作,将数据文件改为读写状态(chicago server, wilson server都执行)

alter tablespace users read write;

--以上操作完毕

 

/*

执行上面的imp时出现 ORA - 12716 :Cannot ALTER DATABASE CHARACTER SET when CLOB data exists

说明两个数据库字符集不一致;做一下处理工作

*/

-- 查看数据库处于的平台

SELECT d.PLATFORM_NAME, ENDIAN_FORMAT

    FROM V$TRANSPORTABLE_PLATFORM. tp, V$DATABASE d

   WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;

-- 首先查看chicago server, wilson server的数据库的字符集

select *

  from nls_database_parameters

 where parameter in ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');

-- 修改目标数据库(wilson server)

shutdown immediate

startup mount

ALTER SYSTEM ENABLE RESTRICTED SESSION;

ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;

ALTER SYSTEM SET AQ_TM_PROCESSES = 0;

alter database open;

alter database character set INTERNAL_USE 为"chicago数据库的NLS_CHARACTERSET的value值";

shutdown immediate

startup

-- 在wilson server上执行导入

[oracle@&& ~]$imp '/ as sysdba\' TRANSPORT_TABLESPACE = y file =/home/oracle/exp_users.dmp datafiles =/home/oracle/oracle/product/10.2.0/oradata/wilson/users01.dbf log=/home/oracle/imp_users_wilson.log

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25533574/viewspace-714714/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2011-03-17

  • 博文量
    17
  • 访问量
    64365