大数据培训之旅——Oracle-5(sqlldr,参数文件,字符集,手工建库)
对于我们的oracle来说,数据就是命根子……这些数据除了通过前端过来,还需要我们手动录入,但是录入会累死人的,于是我们可以利用命令来导入有规律的数据,比如我们来看看如何从Excel中导入数据。
来说说第一种:这个是Excel的技术了,就是自己写公式,这没法具体说,不然就变成了Excel教程了,大家去看看Excel怎么写公式就可以了,这里给个思路,用公式功能批量生成insert语句比如:= "INSERT INTO PERSON(PERSON_ID, PERSON_NAME,PERSON_SEX) VALUES('" & B1 & "', '" & C1 & "', '" & D1 & "');" 之后就可以在执行sql语句了。
来说说第二种:同样先是Excel技术,我们把Excel数据来另存为txt文档,记得选择制表符分隔
——————————————————————————————————————————————————————
这样的话就会导出以tab键分隔的文本文档,我们来看看如何导入到库中。首先我们需要把导出的txt文档传到虚拟机中,这种小文件,我们在安装vmtools后可以直接拖拽进去,不过这里说一个SecureCRT的功能。
——————————————————————————————————————————————————————
——————————————————————————————————————————————————————
之后我们在虚拟机中vi input.ctl,之后写上一些东西:
——————————————————————————————————————————————————————
——————————————————————————————————————————————————————
之后再去查询表就可以查到了。
第三种是用Excel将文件另存为csv文件,之后上传导入,不过我们要修改修改ctl文件:
load data
infile 'test3.csv'
Append into TABLE test
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 源数据以逗号分隔,后面半句是因为oracle只有number没有int所以这样设置
TRAILING NULLCOLS 遇到空行跳过
(ID INTEGER EXTERNAL TERMINATED BY ',', 加上上半句将数据转换成Integer类型
USER_NAME char(30),
LOGIN_CODE char(30))
之后我们使用:
sqlldr+用户名/密码+control = 控制文件+log=日志文件 skip=跳过行数 direct = y 路径加载加快抽取速度
sqlldr scott/gongao control =intput.ctl log=input.log skip=1 direct = y 因为csv文件第一行是表头所以跳过
这种方法有个好处是如果不满足抽取规则会生成一个bad文件,可以看看那些不符合规则。
最后一种就是直接使用可视化工具粘贴,比如PL/SQL Developer,可视化工具就不仔细说了,代码才是王道
之后又是长篇大论了,关于oracle的配置文件,pfile和spfile:数据库启动到nomount会加载spfile,spfile文件位置:$ORACLE_HOME/dbs,命名规则是:spfile$SID.ora,当然这里还有一个文件pfile,这是spfile的备胎,spfile不好用就会自动读pfile,如果都不好用就会报错了,spfile这东西同样是二进制文件,vi是看不懂的而且无法修改,一般用alter system set 参数=值 scope=both/spfile来修改,而pfile可以直接vi修改,当然两者是可以互相生成的:创建pfile:create pfile from spfile; 创建spfile:create spfile from pfile;
来看看一些配置文件常出的问题:
——————————————————————————————————————————————————————
——————————————————————————————————————————————————————
这就是简单的参数文件错误,以及如何应对。还记得我们当初建库的时候,我们没有修改字符集么,这样会导致表中无法显示中文,我们来看看
——————————————————————————————————————————————————————
——————————————————————————————————————————————————————
——————————————————————————————————————————————————————
——————————————————————————————————————————————————————
——————————————————————————————————————————————————————
——————————————————————————————————————————————————————
中文我们可以显示了,下面就得说说手工建库了,毕竟不是所有的服务器都会安装图形界面的。因为涉及到删库以及一系列复杂过程,就不图片显示了。首先需要手工删库:
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter system enable restricted session;(静默状态,DBA能安全地执行某些操作,这些操作要求从当前非DBA用户中隔离出来操作。)
drop database;
cd $ORACLE_BASE/oradata
mkdir test
手工建库
1.修改环境变量重设sid
[[email protected] ~]$ vi ~/.bash_profile
ORACLE_SID=test
[[email protected] ~]$source ~/.bash_profile
2.建立初始化文件
[[email protected] ~]$ vi $ORACLE_HOME/dbs/init$ORACLE_SID.ora
control_files = (/oracle/app/oradata/test/control1.ctl,/oracle/app/oradata/test/control2.ctl,/oracle/app/oradata/test/control3.ctl)
undo_management = AUTO
undo_tablespace = UNDOTBS1
db_name = test
db_unique_name = test
db_block_size = 8192
sga_max_size = 320M
sga_target = 320M
3.建立密码文件
[[email protected] ~]$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=lipengfei force=y
4.建立所需目录
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/bdump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/pfile
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/cdump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/dpdump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/udump
[[email protected] ~]$source ~/.bash_profile
5.建立spfile
SQL> startup nomount
SQL> create spfile from pfile;
6.建立数据库
[[email protected] ~]$ vi /home/oracle/createDB.sql
内容为:
create database test
logfile group 1 ('$ORACLE_BASE/oradata/test/redo01.log') size 100m,
group 2 ('$ORACLE_BASE/oradata/test/redo02.log') size 100m,
group 3 ('$ORACLE_BASE/oradata/test/redo03.log') size 100m
maxlogfiles 10
maxlogmembers 5
maxloghistory 5
maxdatafiles 100
maxinstances 1
character set zhs16gbk
national character set al16utf16
datafile '$ORACLE_BASE/oradata/test/system01.dbf' size 350m reuse autoextend on next 1m maxsize unlimited extent management local
sysaux datafile '$ORACLE_BASE/oradata/sysaux01.dbf' size 350m reuse autoextend on next 1m maxsize unlimited
default temporary tablespace temp01 tempfile '$ORACLE_BASE/oradata/test/temp01.dbf' size 50m reuse autoextend on next 1m maxsize 500m
undo tablespace undotbs1 datafile '$ORACLE_BASE/oradata/test/undotbs01.dbf' size 500m reuse autoextend on next 1m maxsize unlimited;
7.执行建库sql脚本
SQL> @/home/oracle/createDB.sql
8.查看dbf、log、ctl文件是否生成
cd /oracle/app/oradata/test
ls 查看有文件没
9.重新创建数据字典视图、存储过程包
SQL> @/oracle/app/oracle/product/10.2.0/db_1/rdbms/admin/catalog.sql(重新创建数据字典视图)
SQL> @/oracle/app/oracle/product/10.2.0/db_1/rdbms/admin/catproc.sql(重新创建存储过程包)
——————————————————————————————————————————————————————
这就是手工建库的过程了,或许大家会有疑问为啥图片越来越少……其实有两种原因,一是大家也操作这么多了,已经了解了大概操作,另一种就是我比较着急找工作,想要赶紧从海量数据步入大数据,因为大数据就业的话和Oracle有关的也就是数据抽取和SQL了,下一篇应该介绍MySQL for Linux包括备份,基础操作,读写分离,ab复制,但是我决定跳过,直接来Oracle体系结构