这是一个生产数据库的实际操作
***按照一步步的仔细认真的操作 保证整个操作是成功的***
-- 查看表空间名称、查看数据文件的路径和数据文件名称等
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博客 ” ,链接:https://blog.itpub.net/25533574/viewspace-714714/ ,如需转载,请注明出处,否则将追究法律责任。