centos7部署oracle-xe环境搭建并且使用logstash同步到kafka
环境介绍
1.阿里云centos7.4
2.oracle版本oracle-xe-11.2.0-1.0.x86_64
3.系统硬件2核4G
系统修改
注意由于安装oracle需要使Swap达到2G,这样有些云服务器需要手动添加Swap分区
dd if=/dev/zero of=/swapfile bs=1024 count=2148000
mkswap /swapfile
swapon /swapfile
chmod 0600 /swapfile
swapon -a
swapon -s
为了使用方便,手动创建oracle用户
#创建组
groupadd oinstall
groupadd dba
#创建用户
useradd -m -g oinstall -G dba oracle
#创建密码
passwd oracle
#创建目录
mkdir /u01/app -p
chown -R oracle:oinstall /u01/app
chmod -R 775 /u01/app
安装oracle
#oracle版本oracle-xe-11.2.0-1.0.x86_64 从官网下载即可
#安装依赖
yum install java-1.8.0-openjdk*
yum install unzip
yum install libaio*
#安装oracle
unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm
#初始化
#这里需要创建sys账户的密码
/etc/init.d/oracle-xe configure
#修改配置
vim /etc/profile
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/xe; export ORACLE_HOME
ORACLE_SID=XE; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
TNS_ADMIN=$ORACLE_HOME/network/admin
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
source /etc/profile
#修改文件
cd /u01/app/oracle/product/11.2.0/xe/dbs/
cp init.ora initXE.ora
vim initXE.ora
db_name='XE'
memory_target=1G
processes = 150
audit_file_dest='/u01/app/oracle/admin/orcl/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/u01/app/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
# You may want to ensure that control files are created on separate physical
# devices
control_files = ('/u01/app/oracle/oradata/', '/u01/app/oracle/oradata/')
compatible ='11.2.0'
#如果外网不能访问需要修改这里的hostname
cd /u01/app/oracle/product/11.2.0/xe/network/admin
#修改 listener.ora和tnsnames.ora对应的host地址成自己的hostname,重启即可
lsnrctl stop
lsnrctl start
#登录数据库查看是否按照正确
sqlplus sys/syspassword as sysdba;
字符编码
由于centos的字符编码和oracle的字符编码不一致,则会导致在服务器上执行sql脚本时,导入的中文字符会有乱码,所以需要统一字符编码。我这里使用AL32UTF8字符编码
#centos系统字符编码修改
#进入用户
su oracle
vim .bash_profile
export NLS_LANG=american_america.AL32UTF8
source .bash_profile
#oracle修改
sqlplus sys/syspassword as sysdba;
SQL> startup mount
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter session set sql_trace=true;
SQL> alter system enable restricted session;
SQL> alter system set job_queue_processes=0;
SQL> alter system set aq_tm_processes=0;
SQL> alter database open;
SQL> alter databasecharacter set internal_use utf8;
SQL> shutdown immediate;
SQL> STARTUP;
使用logstash同步到kafka
#我这里使用logstash同步,安装过程省略
#配置文件如下:
input {
stdin {
}
jdbc {
jdbc_connection_string => "jdbc:oracle:thin:@//localhost:1521" #数据库地址
jdbc_user => "AGREEMENT" #账号
jdbc_password => "AGREEMENT" #密码
jdbc_driver_library => "/data1/logstash-6.2.4/ojdbc7.jar" #驱动jar包位置,这个文件可以从oracle官网下载
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
jdbc_paging_enabled => "true"
statement => "SELECT * from BASE_EXCHANGE" #要同步的表,可以自己写sql文件
schedule => "* * * * *" #多长时间同步一次,类似crontab
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
#stdout { codec => rubydebug }
kafka {
topic_id => "payment_oracle_test" #kafka topic
bootstrap_servers => "localhost:9092" #kafka地址
codec => "json"
}
}