场景描述:
为了更好的管理数据库中的表空间以及表,所以给项目创建了对应的表空间以及用户
查询其他表空间信息:
--查看表空间及datafile文件名
SELECT tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) total_space
FROM dba_data_files
ORDER BY tablespace_name;
需要注意的是,windows服务器和linux服务器上的oracle路径是不一样的,后面的sql语句是windows下的,如果是oracle只需要换一下dbf路径。
创建表空间:
-- windows 创建表空间
create tablespace test
datafile 'D:\APPHIS\ADMINISTRATOR\ORADATA\JDYY\test.DBF'
size 1024m
autoextend on;
-- linux 创建表空间
create tablespace xxx
datafile '/data/oracle/app/oracle/JDYY/test.dbf'
size 1024m
autoextend on;
其中,“xxx.bdf”要与tablespace对应,表空间1024m大小差不多了,设置“autoextend on”自动扩展
创建用户、授权:
--创建用户
create user test identified by test
default tablespace test
temporary tablespace TEMP;
--授权
grant create session,connect,resource,dba to test;
“default tablespace”为默认表空间,用户建表默认放到该表空间下
--查看表空间下的表
select OWNER,TABLE_NAME,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME='表空间名';
方式一:(从同个服务器的一个表空间转移到另一个表空间下)
因为其他同事没有按照上述流程创建表空间,只是创建了一个用户,用户的表只是放到了USERS表空间下,这样就很混乱,所以要将USERS下的表转移到新建的表空间下,执行如下命令,生成表有某一表空间转移到其他表空间下的sql语句并执行。
--拼出转移sql
select 'alter table ' ||table_name || ' move tablespace 目标表空间名;'
from user_all_tables where tablespace_name='待转移表空间名';
--生成语句如下
alter table 表名 move tablespace 目标表空间名;
--修改用户默认表空间
alter user 用户 default tablespace 表空间名;
方式二:(导出dmp文件,并重新导入其他表空间,该方式也适合导入到其他服务器的oracle)
注意点:
有两种方式修改指定表空间,一种是通过命令行(没有尝试,觉得不是很方便),一种是使用文本编辑器修改里面的tablespace信息。使用记事本(未尝试)、sublime text(一大串数字,无法修改)、ultraEdit(使用十六进制编辑,可以修改,但是导入报错,如下)、notepad++(直接可以打开,直接修改,运行正确),将tablespace信息修改为需要的信息,如图
补充一点:如果是使用dmp方式导入到其他服务器的oracle,序列、存储过程、方法则需要单独从源数据库导出并导入目标数据库
IMP-00069: 无法转换为环境国家字符集句柄
方式三:(使用kettle工具将数据导入到目标表空间下,该方式也适合导入到其他服务器Oracle下)
在目标表空间创建好表,然后进行抽取数据过去(配置kettle过程应该可以设置生成表,还未尝试)