以前都是跟着别人做项目,什么数据库应用部署都经理弄好了,自己只管开发自己的模块就好。这一次自己管项目,于是也高大上了一把,什么创建表空间、创建用户这些以前没搞过的也都学着做了一次。其实没什么难度的,在这里跟各位分享一下我的一点点经验:
首先必须以dba身份登录,为了方便最好借助可视化工具如plsql等,创建表空间及用户的步骤如下:
1.创建表空间
CREATE TABLESPACE srcb
datafile 'D:/CSII/Data/TableSpace/SRCB.dbf' size 400M
autoextend on next 100 Maxsize unlimited logging
extent management local autoallocate
segment space management auto;
datafile为表空间对应的数据文件,用于存储表的记录、索引等信息,后面为存放的路径及文件名。
2.创建用户:
CREATE USER SRCB
identified by SRCB
default tablespace srcb;
创建用户SRCB,密码为SRCB,表空间为刚创建的srcb。
3.给用户指定权限:
grant connect,resource to SRCB;
connect是最基本的角色,可以建立会话和数据库连接等;resource角色则可以做建表建索引等操作。
4.将用户SRCB授权为dba:
grant dba to SRCB;
这一步是看自己需求的,我是为了方便直接给了dba。
以上是创建表空间及其用户并赋予权限的步骤,还有一些其他可能会用到的操作如下:
1.更改表空间名称
alter tablespace SRCB rename to PORTAL_DATA;
2.表结构修改
增加表字段
alter table cms_document add ext01 varchar2(96);
去除字段
Alter table cms_document drop column ext01;
修改字段
Alter table cms_document rename ext01 xxx;
Alter table cms_document modify ext01 varchar2();
3.导入dmp文件
imp SRCB/SRCB file=XXX.dmp log=XXX.log full=y ignore=y
SRCB分别是登录名和密码,file为导入的dmp文件名,可以用绝对地址亦可用相对地址,log为到处的日志记录,路径同file。full=y是导入整个文件,ignore=y是忽略创建错误。要直接用imp命令,必须oracle的bin加入到path路径下(同java),亦可用全路径。
如果是导入非本机数据库,可采用一下方式:
imp SRCB/SRCB@ip:port/db file=XXX.dmp log=XXX.log full=y ignore=y
如上可看出加了@ip:port/db这段,ip和port分别是远程数据库所在机器的ip和端口,port一般为1521,db为数据库实例名称。这个方式同sqlplus的写法是一样的。
4.执行sql脚本
sqlplus username/password@db @xxx.sql > xxx.log,可可以为:sqlplus username/password@ip:port/db @xxx.sql > xxx.log
第二种是通用的写法,第二种写法必须在tnsnames.ora文件中配置db对应的ip、port、数据库实例等信息,这个可以参考我的oracle入门文章。执行sql脚本用@,如果有多个脚本,可以在一个脚本文件中用@引用其他的,然后执行这个脚本文件即可,“>”将日志输出到xxx.log,便于查看导入的情况日志还是十分有必要的。
5.数据导出
数据导出有几种方式,我们直接借助plsql工具,这里介绍两种方式的导出:dmp文件和insert语句导出。为什么会介绍这两种呢,因为之前的项目碰到过这个问题,这里我就说下这两种方式的利弊:
dmp方式:很常用,之前基本都用的这种方式,但碰到过一个问题:导出的数据库和要导入的数据库版本不一样,会提示头部有问题。我在网上看到有人说可以直接改dmp文件的头信息即可,我没试过,但想想如果要导入到多个不同版本的oracle,每次都得改啊。
insert语句方式:这个是通用的,甚至你可以导入到其他数据库。但有个问题,大字段如blob数据不能用这种方式导出,我就悲剧的碰到过,后面直接改为varchar2了。
以上便是我最近碰到的有关oracle数据的问题及其解决方法,都是一些经验之谈,如有问题还望指出。