这两天在找oracle的安装方法和远程连接方法,主要是为了使用sqlloader功能,特地做些笔记。
这里oracle版本选择oracle11gXE的版本,Oracle 11g XE 是 Oracle 数据库的免费版本,支持标准版的大部分功能,做为免费的 Oracle 数据库版本,XE 的限制是:
最大数据库大小为 11 GB
可使用的最大内存是 1G
一台机器上只能安装一个 XE 实例
XE 只能使用单 CPU,无法在多CPU上进行分布处理。
当然对于学习数据的人来说是没有问题的。
1.下载安装oracle11gXE
- 安装的过程中一切默认即可,要求输入密码作为system和sys或sysdba的密码时输入:abc123,简单好记。
- 打开命令行窗口,输入:
sqlplus
- 使用DBA角色登陆: 用户名
system
,密码abc123
- 查看有哪些用户
select username from all_users;
- 先对hr用户解锁(使用hr作为日常数据库使用的用户,而不是sysDBA )
alter user hr account unlock;
- 对hr用户修改密码为abc123:
alter user hr identified by abc123;
2.安装instantclient客户端
连接远程oracle需要安装instantclient客户端,安装了instantclient也可以访问本地的oracle数据库,建议安装,因为python,R等其他程序访问oracle也是需要instantclient的。
下载地址是: http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
下载后解压到D盘根目录,比如 D:\instantclient_11_2 ,并添加如下环境变量:
- NLS_LANG :SIMPLIFIED CHINESE_CHINA.ZHS16GBK
- TNS_ADMIN :D:\instantclient_11_2
- PATH :D:\instantclient_11_2
在instantclient_11_2目录下,新建监听文件tnsnames.ora,内容如下:
your_tns =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
HOST是oracle主机地址,如果是本地就是127.0.0.1,如果是远程地址就写远程地址,SERVICE_NAME 是oracle的实例,oracleXE的默认实例是XE,完全版的默认实例是 ORCL。
最好的方法就是复制oracle安装目录下面对应地方的tnsnames.ora文件的内容。
3.使用PLSQL Developer连接本地oracle
刚才已经安装了oracleXE,也安装了instantclient客户端,接下来是用PLSQL 连接了。
为了方便,修改oracleXE的监听文件:
C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN\tnsnames.ora,内容和刚才的监听文件一样:
your_tns =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
配置PLSQL
工具 –> oracle连接 –>
oracle主目录名:
D:\instantclient_11_2
OCI库:
D:\instantclient_11_2\oci.dll
保存后重启PLSQL ,输入账号密码,连接选择XE,normal方式。
4.使用PLSQL Developer连接远程oracle
连接远程oracle,只需要在instantclient_11_2客户端的tnsnames.ora里面增加新的连接参数即可。
your_tns =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 你的远程IP)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 实例名)
)
)
由于oracle完整版安装在虚拟机里面,在宿主机使用pl/sql + instantclient 的连接方式。
注意,instantclient最好就放在磁盘根目录,文件夹中不要有空格,中文什么的。
tnsnames.ora的内容,最好的方法就是复制oracle安装目录下面对应地方的tnsnames.ora文件的内容。
我说,坑很多,明明虚拟机里面oracle好好地,用sql检查server_name好像也没问题,但是问题恰恰就是server_name不一样导致的。
5. 快速导入数据到oracle
使用sqlloader的前提是,本地安装有oracle数据库,可以安装oracleXE版本,安装方法参考前面的内容。
load.ctl 文件,内容如下:
OPTIONS (skip=1,rows=1000) -- sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行,rows表示每次提交的记录数
LOAD DATA INFILE ' D:\sqlldr\data_file.txt' --数据文件的位置
BADFILE 'c:\sqlldr\bad.txt' --坏文件的位置,导入失败的记录放在这里
TRUNCATE --操作类型,用 truncate table 来清除表中原有记录
INTO TABLE table_name -- 要插入记录的表
FIELDS TERMINATEd BY ',' -- 数据中记录用 "," 分隔
TRAILING NULLCOLS --表的字段,没有对应的值时允许为空
(
user_nbr --插入表对应的字段
, cust_id
, is_low_tm
, mob_stat
, nbr_cnt
, prod_kd_nbr
, cust_name
)
将数据文件也放到D:\sqlldr目录下,然后在cmd命令行执行
sqlldr userid=用户/密码@数据库名 control=D:\sqlldr\load.ctl log=D:\sqlldr\load.out
数据库名即 tnsnames.ora 文件中的 your_tns 。
也就是说,需要配置好 instantclient 客户端才能使用。更多详细参数说明请自行百度,网上很多。
6. 快速导出数据
快速导出数据需要用到sqluldr2,这是基于oci8接口编写的小工具,但是效果奇好,在全世界很多数据库使用人员都在使用。
首先创建123.sql文件,内容是查询sql语句。
select * from jobs
然后在cmd中执行
sqluldr2.exe USER=hr/abc123@XE sql=123.sql head=yes FILE=D:\out_data.txt
hr,abc123@xe:分别是数据库用户,密码,和监听端口。
sqluldr2的使用方法可以通过cmd中输入sqluldr2查看。
默认是用逗号作为分隔符。有些帖子说可以对特殊字符转移,比如回车,逗号什么的,但是我没有成功。所以只能通过在sql语句中使用
REPLACE(REPLACE(REPLACE(COL,','),CHR(10)),CHR(13))
来处理。
如果有什么朋友成功了,记得转告啊。