Centos7上Oracle数据库创建表空间并导入数据

落爺英雄遲暮 提交于 2020-08-09 11:25:03

前言

最近公司需要在 Centos7 虚机上安装上 Oracle11g 数据库,并在数据库里面建表和导入数据,由于之前没有实际操作过,所以自己整理一篇相关的笔记记录一下具体的过程以及在这个过程中遇到的问题。

正文

一、Centos7虚拟机上安装上Oracle11g数据库

具体的安装步骤可以自己百度,网上有很多教程哈。


二、表空间的创建

需要注意的是:表空间有默认的表空间,但是默认的表空间容量很小,只有几百兆,所以不推荐用默认的表空间。

Oracle 数据库建立表空间的语句(其中size的单位可以是G也可以是M),其中表空间创建的最大容量是不超过32G(也就是小于32G,不能等于哈),如果空间超过了32G,可以手动扩容,创建表空间的SQL语句如下:

create tablespace umsTradeDetail datafile '/oradata/tablespace/umsTradeDetail01.dbf' size 32G  autoextend on next 1M maxsize unlimited; 

因为我创建的表空间需要250G,所以 Oracle 数据库表空间需要扩展(因为最大都是小于32G),扩展SQL语句(扩展的时候需要注意,表空间名称还是和创建的时候一样,文件名字依次累加 umsTradeDetail01.dbf,umsTradeDetail02.dbf…)如下:

ALTER TABLESPACE umsTradeDetail ADD DATAFILE datafile '/oradata/tablespace/umsTradeDetail01.dbf' size 32G  autoextend on next 1M maxsize unlimited; 

Oracle数据库需要创建临时表空间,临时表空间的大小,关系到查询、排序等操作的效率,(创建用户的时候要指定表空间和临时表空间),创建临时表空间的SQL语句如下:

Oracle数据库创建临时表空间:

create temporary tablespace 临时表空间名称 tempfile  '/ORADATA/callcent/datafile/bmsbak_temp01.dbf' size 4096M  autoextend on next 1M maxsize unlimited; 

比如我这里创建临时表空间的SQL语句:

create temporary tablespace umsTradeDetailTemp tempfile  '/oradata/tablespace/umsTradeDetail_temp01.dbf' size 30G  autoextend on next 1M maxsize unlimited; 

Oracle 数据库创建用户,SQL语句如下:

create user 用户名 identified by  密码 default tablespace 表空间名称 temporary tablespace  临时表空间名称;

比如我这里:


然后再赋予刚刚创建的用户权限:

grant resource to tb;
grant connect to tb;

三、表的创建

以上步骤完成之后,就可以开始建表了。用刚刚创建的用户(TB)登录数据库:sqlplus tb/密码

需要注意:这里登录不是sqlplus / as sysdba登录, sysdba是系统超级管理员,不要弄错了。


登录进去之后,就可以输入创建表的SQL语句了,我这里创建了4张表,然后可以执行以下SQL语句看看用户下面创建的表

select t.OWNER,t.TABLE_NAME from all_tables t  where owner='TB';

可以看到我刚刚建立的4张表,说明4张表确实创建成功了,现在就可以往这4张表里导入数据了。


四、数据库表数据的导入

首先需要通过 ftp 工具将本地的dmp数据包上传到 centos7 系统的文件系统指定的目录下面(需要注意的是可以 看到这里的文件是 root权限,所以我们需要修改下 dmp 的权限,改成 oracle 的),


把 dmp 包里面的数据导入到 Oracle 数据库里面去(用 impdb 语法导 入),SQL语句如下所示:

impdp 用户/密码  DIRECTORY=**** DUMPFILE=文件名.dmp REMAP_SCHEMA=源数据库schema:目标数据库schema  remap_tablespace=原数据库表空间:目标数据库表空间   TABLE_EXISTS_ACTION=truncate;

需要注意的是 DIRECTORY 文件名不能是绝对路径,要设置成相对路径,比如我把 dmp 包放在 /oradata/dmps 路径(此路径是绝对路径)下面的,那么我就需要把 /oradata/dmps 路径设置成相对路径。设置的方法如下所示:

首先执行以下两条语句:

create or replace directory dir_dp as '/oradata/dmps/'
Grant read,write on directory dir_dp to tb

注意:如果文件的权限是 root,还需要把文件或者目录的权限修改成 oracle 权限

chown -R oracle:oinstall /oradata/dmps

我这里的具体执行(TABLE_EXISTS_ACTION的参数说明:truncate 是如果原表有数据,导入的时候会删除原来的数据,而 APPEND 是直接在原来的基础上添加数据,replace 这个代表,目标库如果已经创建表的话,就替换目标表):

impdp tb/ums2020  DIRECTORY=dir_dp  DUMPFILE=zgsls.dmp REMAP_SCHEMA=padb:TB  remap_tablespace=USERS:umsTradeDetail   TABLE_EXISTS_ACTION=APPEND;

把上面的语句用 oracle 用户权限执行(这个 dmp 包的是3G的,执行了1个多小时,还有一个10G的包,执行时间是4个小时):


五、数据库表数据的导出(待完善)

把数据从oracle数据库里面导出(用 exp 数 据 导 出)


六、常用的Linux命令

权限修改为oracle权限:

chown -R oracle:oinstall /oradata

查看文件的Md5值(一般用于检查文件是否有损坏)

md5sum xxx

七、一些问题集合

如果出现归档日志满了,会导致用户无法登录(如下图所示),解决办法是需要删除归档日志:

rman target /
delete archivelog all;

创建表的时候,备注字段有中文,客户端字符集导致中文乱码,导致创建表出现错误,不能创建表,如下图所示:


root用户登上数据库服务器,执行 echo $LANG 看看你的系统字符集是什么,我的是UTF-8


再oracle登录看看,执行以下sql,看看Oracle客户端字符集

select * from nls_database_parameters t where t.PARAMETER='NLS_CHARACTERSET';

发现不匹配,此时需要修改环境变量:vi .bash_profile,然后将最后一行红色框里面的替换为如下语句:

export NLS_LANG="Simplified Chinese_china".ZHS16GBK

修改完之后还需要执行如下命令使修改生效:

source .bash_profile

然后在Xshell工具里面修改字符集:


修改好之后再重新启动Xshell工具连接服务器就好了

如何关闭归档日志


小结

以上就是我的学习记录,之后可能还会持续更新完善。





















易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!