oracle spatial运维操作备忘录,持续更新中……
数据环境
创建表空间
1.创建表空间查看用户使用的表空间,分别查询所有用户:
select distinct tablespace_name from user_tables;
2.查看一共该用户下有多少表空间:
select t.tablespace_name, round(sum(bytes / (1024 * 1024)), 0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;
3.为用户规划并建立表空间
-- 创建表空间 USERNAM为用户名
create tablespace USERNAME datafile
'F:\ORADATA\USERNAME_1.DBF' size 4096M reuse ;
-- 增加表空间,设置扩展
alter tablespace USERNAME add datafile
'F:\ORADATA\USERNAME_2.DBF' size 4096M autoextend on next 100M
需要注意的一点是,在创建表空间的时候,单个DBF文件大小是有限制的。
Oracle数据文件默认大小上限是32G,如果要数据文件大于32G,需要在数据库创建之初就设置好。
表空间数据文件容量与DB_BLOCK_SIZE有关,在初始建库时,DB_BLOCK_SIZE要根据实际需要,设置为 4K,8K、16K、32K、64K等几种大小,ORACLE的物理文件最大只允许4194304个数据块(由操作系统决定),表空间数据文件的最大值为 4194304×DB_BLOCK_SIZE/1024M。
即:
4k最大表空间为:16384M=16G
8K最大表空间为:32768M=32G
16k最大表空间为:65536M=64G
32K最大表空间为:131072M=128G
64k最大表空间为:262144M=256G
新建自定义坐标系
占个坑,这块我还没吃透,虽然有SQL语句,但是坐标系涉及敏感信息,就不放出来了,以后补充。
表的相关操作
1.修改原表名称
ALter table <tablename> RENAME to <newtablename>
2.查询该表索引
select * From user_indexes t where
t.table_name=<'TABLENAME'>
3.删除索引
drop index <INDEX_NAME>
4.拼接批量修改索引名称的SQL
select 'alter index '||i.index_name||' rename to '||substr(i.index_name,0,(length(i.index_name)-1)) ||';' sql_text
from user_ind_columns i where
i.column_name <> 'GEOMETRY' and i.table_name in
(select table_name From user_sdo_geom_metadata t where t.srid='9992017')
这里需要注意一点,
查询索引可以在user_ind_columns和user_indexs两个视图中查到,之所以用user_ind_columns判断而不是用user_indexs,因为有的数据的索引的所有者可能不是该用户。即,用user_indexs有可能会有遗漏的情况。
5.拼接批量修改约束名称的SQL
select 'alter table '||table_name||' rename constraint '||constraint_name ||' to '||substr(constraint_name,0,(length(constraint_name)-1)) ||';' sql_text
from user_constraints where
table_name in
(select table_name From user_sdo_geom_metadata t where t.srid='9992017')
6.创建空间索引:
create index <user>.<indexname> on <user>.<tablename>(geometry) indextype is mdsys.spatial_index;
修改元数据表SRID指向并新建SRID
1.修改原表指向
UPDATE USER_SDO_GEOM_METADATA SET TABLE_NAME = '@Value(新表名)' WHERE TABLE_NAME = '@Value(TABLE_NAME)';
commit;
2.插入新的SRID
insert into user_sdo_geom_metadata
(table_name, column_name, srid, DIMINFO)
values
('<TABLE_NAME>',
'geometry',
'<srid>',
sdo_dim_array(sdo_dim_element('X', -180, 180, 0.5),
sdo_dim_element('Y', -90, 90, 0.5)));
不要忘记点击提交!
数据库的导入导出
通过DBLINK导出dump方式整个用户导出。
1.本地库创建dblink指向远程库。
--以'192.168.1.1/testora'数据库,testuser用户,密码testpassword,创建DBlink名称为“linkname”为例
create database link linkname connect to testuser identified by testpassword using '192.168.1.1/testora';
2.本地库创建directory目录对象并授权
--只需要执行一次,创建其他用户不用再执行了
Create directory expdp_dir as 'E:/ expdp_dir/';
grant all on directory expdp_dir to system;
3.被导出数据库授予远程数据库用户exp_full_database权限
GRANT exp_full_database TO linkname;
4.创建bat文件导出数据库。
expdp system/oracle@192.168.1.1/testora network_link=linkname directory=expdp_dir dumpfile=testuser.dmp logfile=testuser.log schemas=testuser
pause
5.bat导出数据
impdp system/oracle@192.168.1.2/test directory=expdp_dir dumpfile=testuser.dmp logfile=testuser_导入.log table_exists_action=replace
pause
通过create …as…导入指定数据
CREATE TABLE <TABLENAME> AS SELECT * FROM <TABLENAME>@<linkname>;