oracle修改字段为费控,EAS附件表由数据库迁移到FTP

EAS

附件表由数据库迁移到FTP

环境说明:

EAS:EAS8.2

DB:Oracle 11.2.0.1.0

FTP: vsftpd-2.2.2

FTP_OS: CentOS release 6.7 (Final)

问题说明:

金蝶系统启用费控报销后,数据库大小在一年内由5G迅速上升至350G,其中附件表

t_bas_attachment

ffile

字段属于BLOB类型,

大小达270G,平均1条数据1M大小,数据库性能和日常维护都会受到影响,例如:

日常expdp备份时备份到t_bas_attachment表时,经常会出现ORA-01555错误(

http://blog.itpub.net/29785807/viewspace-2640146/

)

,一味的调大参数并不能从根本上解决问题;

解决方案:

通过EAS,将附件迁移到FTP服务器上;即将 t_bas_attachment表

ffile

字段数据迁移到FTP服务器上;

实施过程:

一:搭建FTP服务器

二:更改附件存储方式

三:配置FTP并启用

四:查看迁移信息

五:开始迁移

六:释放段空间

七:释放数据文件空间

八:查询迁移后信息

一:搭建FTP服务器

1.1

查看系统自带的vsftpd

[root@chenjchserver ~]# cat /etc/issue

CentOS release 6.7 (Final)

[root@chenjchserver ~]# rpm -qa|grep vsftpd

vsftpd-2.2.2-14.el6.x86_64

1.2

设置vsftpd.conf参数

[root@chenjchserver vsftpd]# ls

ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh

[root@chenjchserver vsftpd]# cp vsftpd.conf vsftpd.conf.bak

[root@chenjchserver ~]# vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

xferlog_std_format=YES

connect_from_port_20=YES

xferlog_file=/var/log/xferlog

idle_session_timeout=6000

data_connection_timeout=1200

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

chroot_list_enable=YES

chroot_local_user=YES

userlist_deny=NO

userlist_enable=YES

userlist_file=/etc/vsftpd/user_list

chroot_list_enable=YES

local_root=/chenjchserver/cjcfile

listen=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

1.3

创建ftp用户

[root@chenjchserver cjcfile]# useradd cjcuser

[root@chenjchserver cjcfile]# passwd cjcuser

[root@chenjchserver cjcfile]# id cjcuser

1.4

创建并设置ftp目录权限

[root@chenjchserver cjcfile]# mkdir /chenjchserver/cjcfile -p

[root@chenjchserver cjcfile]# chmod 777 /chenjchserver/cjcfile

1.5

重启ftp服务

[root@chenjchserver ~]# service vsftpd status

vsftpd is stopped

[root@chenjchserver ~]# service vsftpd start

Starting vsftpd for vsftpd:                                [  OK  ]

[root@chenjchserver ~]# ps -ef|grep vsftpd

root      4330     1  0 14:10 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

root      4333  3897  0 14:10 pts/0    00:00:00 grep vsftpd

1.6 ftp

服务设置自启动

[root@chenjchserver ~]# chkconfig --list|grep vsftpd

vsftpd           0:off 1:off 2:off 3:off 4:off 5:off 6:off

[root@chenjchserver ~]# chkconfig vsftpd on

[root@chenjchserver ~]# chkconfig --list|grep vsftpd

vsftpd           0:off 1:off 2:on  3:on  4:on  5:on  6:off

1.7

测试ftp基本功能

---Windows

连接FTP

---1

登陆FTP

C:\Users\Administrator>ftp 192.*.*.*

连接到 192.*.*.*。

220 (vsFTPd 2.2.2)

用户(192.*.*.*:(none)): cjcuser

331 Please specify the password.

密码:

230 Login successful.

---2

查看根目录下有哪些文件

ftp> dir

200 PORT command successful. Consider using PASV.

150 Here comes the directory listing.

-rw-r--r--    1 0        0              10 Dec 27 06:26 1.text

226 Directory send OK.

ftp:

收到 64 字节,用时 0.00秒 32.00千字节/秒。

---3

在根目录创建FTP目录test1227

ftp> mkdir test1227

257 "/test1227" created

---4

切换到test1227目录

ftp> cd test1227

250 Directory successfully changed.

---5

切换本地目录

ftp> lcd Desktop

目前的本地目录 C:\Users\Administrator\Desktop。

---6

上传文件

ftp> put 000111222.txt

200 PORT command successful. Consider using PASV.

150 Ok to send data.

226 Transfer complete.

ftp:

发送 61 字节,用时 0.02秒 3.81千字节/秒。

---7

下载文件

ftp> cd ..

250 Directory successfully changed.

ftp> dir

200 PORT command successful. Consider using PASV.

150 Here comes the directory listing.

-rw-r--r--    1 0        0              10 Dec 27 06:26 1.text

drwxr-xr-x    2 501      501          4096 Dec 27 07:01 test1227

226 Directory send OK.

ftp:

收到 130 字节,用时 0.00秒 32.50千字节/秒。

ftp> get 1.txt

200 PORT command successful. Consider using PASV.

550 Failed to open file.

ftp> get 1.text

200 PORT command successful. Consider using PASV.

150 Opening BINARY mode data connection for 1.text (10 bytes).

226 Transfer complete.

ftp:

收到 10 字节,用时 0.02秒 0.45千字节/秒。

---8

删除单个文件

ftp> delete 1.txt

250 Delete operation successful.

---9

删除文件夹下文件

ftp> mdelete test1227

200 Switching to ASCII mode.

mdelete test1227/000111222.txt? yes

250 Delete operation successful.

ftp> dir

200 PORT command successful. Consider using PASV.

150 Here comes the directory listing.

-rw-r--r--    1 0        0              10 Dec 27 06:26 1.txt

drwxr-xr-x    2 501      501          4096 Dec 27 07:11 test1227

226 Directory send OK.

ftp:

收到 129 字节,用时 0.01秒 25.80千字节/秒。

---10

删除目录

ftp> rmdir test1227

250 Remove directory operation successful.

二:更改附件存储方式

附件更改方式由DB改成FTP

---

参数设置---附件存储方式

f9786d12f4a626ad602b28b50d9bcdaa.png

三:配置FTP并启用

5c42b8092ac63ff057b5c70aa81274d3.png

5ee32a2d5a5fc2d3f738647d202fe284.png

四:查看迁移信息

---

前后台分别查看待迁移附件数量是否一致

select

count

(*)

from

T_BAS_ATTACHMENT

;

5361c76d11d805f9f50ab17295687cf4.png

五:开始迁移

---

耗时5小时

0ffb6b67cee0b9ede9e58fe7c37fa968.png

1d8bba818b7ab8bacdbdce1342cb47e6.png

迁移完成后,前台界面如果关不掉,可以

任务管理器杀掉 java.exe,强制退出;

迁移过程中可用看到FTP目录下已有新文件产生:

c01c3dcc259a354804ec286713d64159.png

---

查看FTP日志

2930c2b980e5ffd916f4d541d20c0133.png

---

可用通过数据库查看迁移完成多少附件,剩余多少附件待迁移

select

count

(*),

fstoragetype

from

t_bas_attachment

group

by

fstoragetype

order

by

2

desc

;

六:释放段空间

6.1

查看段信息

select

table_name

,

column_name

,

segment_name

,

INDEX_NAME

from

dba_lobs

where

table_name

=

'T_BAS_ATTACHMENT'

and

owner

=

'CHENJCH'

;

8feb3ff21477f4d73adcf333edaac06c.png

6.2

查看段大小

select

bytes

/

1024

/

1024

||

' MB'

,

segment_name

,

segment_type

from

dba_segments

where

owner

=

'CHENJCH'

and

segment_name

in

(

'T_BAS_ATTACHMENT'

,

'SYS_LOB0000xxxxxxxxxxxxx'

,

'SYS_IL00007xxxxxxxxxxxxx'

);

--

迁移前

0fb9f1d0d037a47a4da267571fdc4a82.png

--

迁移后(大小没变,数据虽然少了,但是段空间没有自动释放)

0fb9f1d0d037a47a4da267571fdc4a82.png

6.3

段收缩

---

耗时3.5h

---

会占用一部分磁盘空间

ALTER

TABLE

T_BAS_ATTACHMENT

MODIFY

LOB

(

FFILE

)

(

SHRINK

SPACE

);

---

耗时2min

alter

table

t_bas_attachment

move

;

---

耗时1秒

alter

index

PK_ATTACHMENT

rebuild

;

---

收集统计信息

EXEC

DBMS_STATS.GATHER_TABLE_STATS

(

'K2'

,

'T_BAS_ATTACHMENT'

,

estimate_percent

=>

100

,

CASCADE

=>

TRUE

);

--

在查询段大小(段空间已释放)

56632f9d0bf326a0934eb1e356f01a51.png

6.4

查看附件大小

select

max

(

dbms_lob.getLength

(

ffile

)

/

1024

/

1024

)

as

"

最大(MB)"

,

min

(

dbms_lob.getLength

(

ffile

))

as

"

最小(Bytes)"

,

avg

(

dbms_lob.getLength

(

ffile

)

/

1024

/

1024

)

as

"

平均(MB)"

from

k2.t_bas_attachment

;

---

迁移前:

f61dc1253599cb4690668df3a29adee9.png

---

迁移后:

fd699444b19c43b5af72d197b424eab6.png

七:释放数据文件空间

---

此时数据文件可用空间已经释放了,但是数据文件占用操作系统的空间不会自动释放,可以对高水位下的数据进行收缩;

7.1

查看数据文件信息

select

file_id

,

bytes

/

1024

/

1024

/

1024

as

"

当前大小(GB)"

,

file_name

,

tablespace_name

from

dba_data_files a

where

tablespace_name

=

'CJC_D_TBS'

order

by

1

;

7.2

查看可回收的段空间

select

a.file_id

,

a.file_name

,

a.filesize

,

b.freesize

,

(

a.filesize

-

b.freesize

)

usedsize

,

c.hwmsize

,

c.hwmsize

-

(

a.filesize

-

b.freesize

)

unsedsize_belowhwm

,

a.filesize

-

c.hwmsize canshrinksize

,

'alter database datafile '

||

a.file_name

||

' resize '

||

c.hwmsize

||

'M;'

cmd

from

(

select

file_id

,

file_name

,

round

(

bytes

/

1024

/

1024

)

filesize

from

dba_data_files

where

tablespace_name

=

'CJC_D_TBS'

)

a

,

(

select

file_id

,

round

(

sum

(

dfs.bytes

)

/

1024

/

1024

)

freesize

from

dba_free_space dfs

where

tablespace_name

=

'CJC_D_TBS'

group

by

file_id

)

b

,

(

select

file_id

,

round

(

max

(

block_id

)

*

8

/

1024

)

HWMsize

from

dba_extents

where

tablespace_name

=

'CJC_D_TBS'

group

by

file_id

)

c

where

a.file_id

=

b.file_id

and

a.file_id

=

c.file_id

order

by

unsedsize_belowhwm

desc

;

7.3

数据文件收缩

Resize

大小可用适量增大10M左右,避免ORA-03214错误;

43867930051df4ce9bd989e400fba8cf.png

收缩脚本如下:

alter

database

datafile

'D:\ORADATA\CJC_D_TBS35A.DBF'

resize

1987

M

;

alter

database

datafile

'D:\ORADATA\CJC_D_TBS36A.DBF'

resize

1987

M

;

alter

database

datafile

'D:\ORADATA\CJC_D_TBS33A.DBF'

resize

1988

M

;

……

八 查看迁移后信息

主要

t_bas_attachment

表fstoragetype

,

fremotepath

字段有变化

select

b.fnumber

,

b.fname_l1

,

to_char

(

a.fcreatetime

,

'yyyy-mm-dd hh24:mi:ss'

)

创建时间

,

to_char

(

a.flastupdatetime

,

'yyyy-mm-dd hh24:mi:ss'

)

更新时间

,

a.fname_l1

,

a.fsimplename

,

a.ftype

,

a.ffile

,

a.fsize

,

fattachid

,

fstoragetype

,

fremotepath

from

t_bas_attachment a

left

join

t_pm_user b

on

a.fcreatorid

=

b.fid

;

迁移前:

e4642ef7825004f0ed3427c78a6c10d6.png

迁移后:

4062c672fdf892aba1c3ad7a3e1419df.png

---

实际数据模糊处理

欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!

a9d91c10eed445d4af9d4efddcbc3724.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值