oracle之修改跟踪文件

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之修改跟踪文件

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

该文件目的:是跟踪自上一个增量备份以来哪些块已经修改。
启用:alter database enable block change tracking using file ‘path+filename’
关闭:alter database disable block change tracking;
注意:1)关闭之后,原来的跟踪文件也被删除(本人在windows上测试没有被删除)
2)开启跟踪会消耗系统不小的资源,要慎重

oracle之password file

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之password file

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、作用:
允许远程SYSDBA 或管理员访问数据库,如果没有这个文件验证,即使是sysdba权限的用户,也不能在数据库文件没有加载之前登录数据库,让其加载数据库。
2、创建命令:
直接dos或者linux命令行下:orapwd file= password= entries= force=
file——密码文件名(必要)。
password——SYS 的密码(必要)。
entries——DBA 和操作员的最大数目(可选)。
force——是否重写现有的文件(可选)。
等号(=)两边没有空格。
注:win下放置在%ORACLE_HOME%\database目录下,文件名为PW%ORACLE_SID%.ora;
linux下放置在$ORACLE_HOME/dbs目录下,文件名为orapw$ORACLE_SID

oracle之存储体系

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之存储体系

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

(1) 数据库由一个或多个表空间组成
(2) 表空间由一个或多个数据文件组成。这些文件可以是文件系统中的cooked 文件、原始分区、ASM管理的数据库文件,或集群文件系统上的文件。表空间包含段。
(3) 段(TABLE、INDEX 等)由一个或多个区段组成。段在表空间中,但是可以包含这个表空间中多个数据文件中的数据。
(4) 区段是磁盘上一组逻辑连续的块。区段只在一个表空间中,而且总是在该表空间内的一个文件中。
(5) 块是数据库中最小的分配单位,也是数据库使用的最小I/O 单位。
(6)oracle中的块是操作系统物理块的整数倍

oracle之trace file

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之trace file

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、设置SQL_TRACE=TRUE,服务器就会生成一个包含性能相关信息的跟踪文件。
2、跟踪文件位置:
如果使用专用服务器连接,会在USER_DUMP_DEST 参数指定的目录中生成跟踪文件;
如果使用共享服务器连接,则在BACKGROUND_DUMP_DEST 参数指定的目录中生成跟踪文件。
可以通过SHOW PARAMETER DUMP_DEST或者select name, value from v$parameter where name like ‘%dump_dest%’来查询
3、获得跟踪文件名(标准格式:_ora_.trc):

select d.value||'/'||lower(rtrim(i.instance,chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
from (select p.spid
from v$mystat m, v$session s,v$process p
where m.statistic# = 1 and
s.sid = m.sid and
p.addr = s.paddr ) p,
( select t.instance
from v$thread t,v$parameter v
where v.name = 'thread' and
(v.value = 0 or t.thread# = to_number(v.value))) i,
( select value from v$parameter where name = 'user_dump_dest') d;

oracle之spfile

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之spfile

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、在修改spfile命令如:
Alter system set parameter=value <comment=’text’> <deferred>
<scope=memory|spfile|both> <sid=’sid|*’>
说明:comment表示说明,deferred表示重启后生效
2、查询哪些参数在修改时,必须使用deferred参数
select name from v$parameter where issys_modifiable=’DEFERRED’;
在10g中的结果是:
backup_tape_io_slaves
audit_file_dest
object_cache_optimal_size
object_cache_max_size_percent
sort_area_size
sort_area_retained_size
olap_page_pool_size
3、取消spfile中值的设置
Alter system reset parameter sid=’sid|*’
说明:这里的sid不能省略
4、查看oracle使用spfile还是pfile
Select isspecified,count(*) from v$spparameter group by isspecified;
如果isspecified里有true,表明用spfile进行了指定配置
如果全为false,则表明用pfile启动

mysql数据管理

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:mysql数据管理

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

本人的兴趣一直都是oracle数据库的管理,最近公司上电子商务系统,现在还处于测试状态,不出意外应该没有大问题,因为程序是 php+mysql的,这就涉及到程序的维护、数据库的维护和管理。虽然mysql数据库在一般情况下,直接复制数据库下的data文件夹下面的数据库名 的文件夹可以备份
如 上图,这里我选中的每一文件夹其实是mysql数据库的一个数据库,只要直接复制就可以备份相应的数据库了,但是考虑到系统实时性可能比较高,如果这样备 份,肯定会导致数据的丢失,还有就是因为系统里面的数据库有60多张表,一张表又有三个文件,如果数据量大的时候,备份起来时间比较长
所有决定写一个脚本使用命令mysqldump+windows系统的任务自动定时执行备份,并实现为了方便转移,打包压缩功能

@echo off
echo 批发网中文版和英文版数据库备份
echo.
echo 程序启动时间:%date% %time%
echo.
set "Name=%date:~,4%%date:~5,2%%date:~8,2%_%random%"
set "Path=e:\MySql_BackUp\%Name%"
md %Path%
echo 保存备份数据库文件路径为:%Path%
echo ***********************************************************
echo.
echo %time%:开始备份db_glasses_en数据库……
echo.
e:\AppServ\MySQL\bin\mysqldump --opt -u root --password=4020894 -F -B --default-character-set=utf8 db_glasses_en_bak > %Path%\db_glasses_en_bak.sql
echo 文件:%Path%\db_glasses_en_bak.sql
echo %time%:db_glasses_en数据库备份完成
echo.
echo ***********************************************************
echo.
echo %time%:开始备份db_glasses_cn数据库……
echo.
e:\AppServ\MySQL\bin\mysqldump --opt -u root --password=4020894 -F -B --default-character-set=utf8 db_glasses_cn > %Path%\db_glasses_cn_bak.sql
echo 文件:%Path%\db_glasses_cn_bak.sql
echo %time%:db_glasses_cn数据库备份完成
echo.
echo ***********************************************************
echo.
echo 批发网中英文数据库备份完成……
echo.
echo ***********************************************************
echo.
echo %time%:备份数据库进行压缩……
cd C:\Program Files\WinRAR
WinRAR.exe a -m5 e:\MySql_BackUp\%Name%.rar %Path%
echo.
echo %time%:e:\MySql_BackUp\%Name%.rar压缩完成
echo 请检查文件并做好数据转移……
echo.
echo 程序结束时间:%date% %time%
echo.
echo ***********************************************************
pause

通过上面的脚本实现数据库的备份,结果如下图:

上图即为执行备份后的结果,至于mysql的备份命令mysqldump的相关参数请见mysql的相关文档。
补充说明:
在 mssql里面日志是自动启动的;在oracle归档日志默认情况下是关闭的,可以在mount模式下,使用alter database archivelog开启重做日志归档模式;在mysql中,日志默认情况下也是关闭的,但是它是通过修改my.ini配置文件实现修改的,具体参数如 下:
log-bin=F:\AppServ\MySQL\log\log_bin.log
log=F:\AppServ\MySQL\log\log.log
log-update= F:\AppServ\MySQL\log\update.log
log-slow-queries=F:\AppServ\MySQL\log\mysql-slow.log
log-error=F:\AppServ\MySQL\log\error.log
各日志参数说明:
错误日志:   -log-err
查询日志:   -log
慢查询日志:     -log-slow-queries
更新日志:     -log-update
二进制日志:   -log-bin
注:如果日志参数后面直接跟文件名,那日志文件会放置在mysql/data文件夹下

服务器遭攻击,oracle分析日志

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:服务器遭攻击,oracle分析日志

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

今天公司服务器出现问题,经过启动日志功能,分析日志,大概确定是dos攻击
部分日志如下:

2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml -  80 - 121.204.33.120  Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02  10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 -  114.41.216.107 Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1)  200 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET  /index.shtml - 80 - 221.15.37.5  Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02  10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 -  114.41.216.107 Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1)  200 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET  /index.shtml - 80 - 114.41.216.107  Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02  10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 -  114.41.216.107 Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1)  200 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET  /index.shtml - 80 - 114.41.216.107  Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02  10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 -  222.81.14.4 Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0  64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET  /index.shtml - 80 - 180.126.191.98  Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02  10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 -  117.15.210.226 Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1)  200 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET  /index.shtml - 80 - 121.204.33.120  Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02  10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 -  112.122.131.60 Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1)  200 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET  /index.shtml - 80 - 118.77.181.47  Mozilla/4.0(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64

日志文件实在太多了,最后几分钟都就有20m左右,我们肉眼看上去,没有什么规律可寻的,我决定采用oracle数据帮我们分析
建表如下:
get   varchar2(3000)–保存日志中的一条记录
ip varchar2(15)–保存日志中请求服务器的ip地址(分析的重点)
gettime varchar2(20)  –保存时间(本来有date类型的,不知道为什么,和后面的proc中的程序有的冲突,我也不想改存储过程了,就先改了这个,有时间再想想程序)
第一步:通过net把.log 的日志文件中的数据导入到db的dos_gj中的get列中,程序如下:

string txt = Show_page("log.log");
string[] aba = txt.Replace("\r\n", "@").Split('@');
for (int i = 0; i < aba.Length; i++)
{
OracleHelper.ExecuteNonQuery(OracleHelper.
ConnectionStringLocalTransaction,
System.Data.CommandType.Text,
"insert into dos_gj(get) values (:abc)", new OracleParameter("abc", aba[i]));
}

//读取文件的 Show_page()函数就不放出来了

大概半个多小时,20m文件的数据,全部分条导入到数据中,统计,一共近20w条
第二步:使用proc对这些数据进行分析:
proc如下 :

create or replace
procedure dos_fx
is
cursor c1 is
select get from dos_gj;
begin
for c2 in c1 loop
update dos_gj set
ip=REGEXP_SUBSTR( get, '(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3} '),
gettime=REGEXP_SUBSTR( get, '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}') where get=c2.get;
end loop;
commit;
end;
exec  dos_fx;

不知道什么原因,执行了快两个小时了,现在还是在执行中,我现在怀疑在oracle中cursor +正则表达式+update,执行效率正的很低啊,才20w条数据,执行了2个小时,还没有结果,郁闷,在等待中……
这些对oracle有点无语了,害的我现在还不能睡觉,等在电脑面前,早知道就用ms sql了,听说 2005也支持正则功能了。继续等待(2010年7月3日2:04:58),这个效率,这个速度有点无语哦,听说oracle速度很快,我还得好好学习 哦。等了两个多小时就是学艺不精的后果。
最后想想这个update table的思路不行,新建了一张,使用了新的存储过程(insert)

create or replace procedure dos_fx
is
cursor c1 is
select get from dos_gj;
begin
for c2 in c1 loop
insert into dos_gj_1(ip,gettime,get)values(REGEXP_SUBSTR( c2.get,  '(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}  '),
REGEXP_SUBSTR( c2.get, '^(\d{4})-(\d{2})-(\d{2}) (\d{2}:\d{2}:\d{2})'),c2.get);
end loop;
commit;
end;

同上表,然后执行insert操作,考虑到sql dev占用内存太大,这次使用了pl/sql dev操作,结果使用了1分钟37秒就完成了近20w的数据的操作,这才是oracle的本色啊,O(∩_∩)O哈哈~。
现在想想,应该是刚刚前面的update那种操作导致了数据库死锁导致无限的等待。

好了,数据从log文件,到数据库里面,已经数据提取成功,剩下的就是相关统计的oracle了
统计ip攻击情况

不到一个小时的攻击的结果大概如上图,任务大概完成,先睡觉去,明天继续分析