关闭win10中IPV6隧道

在cmd命令提示符上点右键,以管理员运行,使用以下3条命令把IPv6的接口关闭即可:

netsh interface teredo set state disable

netsh interface 6to4 set state disabled

netsh interface isatap set state disabled

想要还原IPv6隧道则用以下命令:

netsh interface teredo set state default

netsh interface 6to4 set state default

netsh interface isatap set state default

也可以在网络连接中去掉IPV6的选项,如下图,并重启电脑:
ipv6.png

ORA-28547:连接服务器失败,可能是Oracle Net管理错误

描述:监听和服务都正常启动了,但是远程连接的时候会有这种错误
ORA-28547:连接服务器失败,可能是Oracle Net管理错误
解决办法:
listener.ora 文件中

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = ORCL)
      (ORACLE_HOME = d:\app\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:d:\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.219)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = d:\app

(PROGRAM = extproc) 把这句话注释掉重启监听服务就好了。
重启监听:

lsnrctl stop
lsnrctl start

extproc是一个扩展的程序调用接口协议, 连接和调用外部的操作系统程序或进程用时会用到。

Linux下svn命令整理

1、将文件checkout到本地目录

svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.35/pro/domain 
如果开启了https浏览模式也可以写成:
svn checkout https://192.168.1.35/pro/domain
简写:svn co 
svn co https://192.168.1.35/pro/domain

2、往版本库中添加新的文件

svn add file 
例如:svn add test.php(添加test.php) 
svn add *.php(添加当前目录下所有的php文件) 

3、将改动的文件提交到版本库

svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关) 
例如:svn commit -m “add test file for my test“ test.php 
简写:svn ci 

4、加锁/解锁

svn lock -m “LockMessage“ [--force] PATH 
例如:svn lock -m “lock test file“ test.php 
svn unlock PATH 

5、更新到某个版本

svn update -r m path 
例如: 
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。 
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200) 
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit) 
简写:svn up 

6、查看文件或者目录状态

1)svn status path(目录下的文件和子目录的状态,正常状态不显示) 
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】 
2)svn status -v path(显示文件和子目录状态) 
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。 
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。 
简写:svn st 

7、删除文件

svn delete path -m “delete test fle“ 
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file” 
或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种 
简写:svn (del, remove, rm) 

8、查看日志

svn log path 
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化 

9、查看文件详细信息

svn info path 
例如:svn info test.php 

10、比较差异

svn diff path(将修改的文件与基础版本比较) 
例如:svn diff test.php 
svn diff -r m:n path(对版本m和版本n比较差异) 
例如:svn diff -r 200:201 test.php 
简写:svn di 

11、将两个版本之间的差异合并到当前文件

svn merge -r m:n path 
例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)

12、SVN 帮助

svn help 
svn help ci 

——————————————————————————
以上是常用命令,下面写几个不经常用的
——————————————————————————
13、版本库下的文件和目录列表

svn list path 
显示path目录下的所有属于版本库的文件和目录 
简写:svn ls 

14、创建纳入版本控制下的新目录

svn mkdir: 创建纳入版本控制下的新目录。 
用法: 
1、mkdir PATH… 
2、mkdir URL… 

创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
15、恢复本地修改

svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert: 
用法: revert PATH… 
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复 
被删除的目录 

16、代码库URL变更

svn switch (sw): 更新工作副本至不同的URL。 
用法: 
1、switch URL [PATH] 
2、switch –relocate FROM TO [PATH...] 

1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。
17、解决冲突

svn resolved: 移除工作副本的目录或文件的“冲突”状态。 

用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。
18、输出指定文件或URL的内容。

svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。 
svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

Linux下使用iptables端口转发

需要将外网访问本地IP(192.168.255.244)的8443端口转换为访问192.168.255.97的8443端口,这就需要用到iptables的端口映射

实现:

  1. 需要先开启linux的数据转发功能
# vi /etc/sysctl.conf,将net.ipv4.ip_forward=0更改为net.ipv4.ip_forward=1
# sysctl -p  //使数据转发功能生效

在255.244机器上进行相同端口转发

iptables -t nat -I PREROUTING -p tcp --dport 8443 -j DNAT --to 192.168.255.97
iptables -t nat -I POSTROUTING -p tcp --dport 8443 -j MASQUERADE

主机内部的端口映射
我们可能需要将访问主机的7979端口映射到8080端口。也可以iptables重定向完成

iptables -t nat -A PREROUTING -p tcp --dport 7979 -j REDIRECT --to-ports 8080

如果需要本机也可以访问,则需要配置OUTPUT链:

iptables -t nat -A OUTPUT -p tcp --dport 7979 -j REDIRECT --to-ports 8080

查看nat表

iptables -t nat -vnL POSTROUTING --line-number

清空 nat 表

iptables -F -t nat 

Oracle RMAN控制文件备份

进入RMAN界面

rman target /
 
RMAN>
修改控制文件备份方式为自动备份
RMAN > configure controlfile autobackup on;
查看控制文件备份是否为自动备份
RMAN > show controlfile autobackup;
查看控制文件自动备份路径
RMAN> show controlfile autobackup format;
修改控制文件自动备份路径
RMAN > configure controlfile autobackup format for device type disk to '/backup/orcl/%F';
注意%F是DBID+日期,可以用来识别时间及DBID

Oracle在非归档模式下RMAN的备份和恢复

1、Oracle数据库在非归档模式下的备份:

[oracle@dbnode1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on 星期三 8月 8 21:24:39 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

SQL> archive log list;   #查看是否启用归档模式
Database log mode           No Archive Mode
Automatic archival           Disabled
Archive destination           /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/arch
Oldest online log sequence     31004
Current log sequence           31006

登录到rman下:

[oracle@dbnode1 ~]$ rman target /   #登录rman

Recovery Manager: Release 11.2.0.3.0 - Production on 星期三 8月 8 21:29:02 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1351645873)
RMAN> shutdown immediate   #停掉数据库

using target database control file instead of recovery catalog
database closed
database dismounted
Oracle instance shut down
RMAN>startup mount    #启动并挂载数据库,但是不打开

connected to target database (not started)
Oracle instance started
database mounted

Total System Global Area   25120276480 bytes

Fixed Size                     2240016 bytes
Variable Size              19193135600 bytes
Database Buffers            5905580032 bytes
Redo Buffers                  19320832 bytes
开始全量备份
RMAN> run
2> {
3> allocate channel t1 type disk;
4>  backup database format '/bak/rmanbak/20180808/df_%t_%s_%p.bak';
5> }

allocated channel: t1
channel t1: SID=518 device type=DISK

Starting backup at 08-8月 -18
channel t1: starting full datafile backup set
channel t1: specifying datafile(s) in backup set
input datafile file number=00005 name=/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/nnc_data01.dbf
input datafile file number=00003 name=/home/oracle/app/oracle/oradata/ORCL/undotbs01.dbf
input datafile file number=00010 name=/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/nnc_index03.dbf
input datafile file number=00007 name=/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/nnc_data03.dbf
input datafile file number=00008 name=/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/nnc_index01.dbf
input datafile file number=00013 name=/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/nnc_data01b.dbf
input datafile file number=00006 name=/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/nnc_data02.dbf
input datafile file number=00001 name=/home/oracle/app/oracle/oradata/ORCL/system01.dbf
input datafile file number=00012 name=/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/nnc_data01a.dbf
input datafile file number=00002 name=/home/oracle/app/oracle/oradata/ORCL/sysaux01.dbf
input datafile file number=00009 name=/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/nnc_index02.dbf
input datafile file number=00011 name=/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/IUFO.dbf
input datafile file number=00004 name=/home/oracle/app/oracle/oradata/ORCL/users01.dbf
channel t1: starting piece 1 at 08-8月 -18
channel t1: finished piece 1 at 08-8月 -18
piece handle=/bak/rmanbak/20180808/df_983655480_2_1.bak tag=TAG20180808T213800 comment=NONE
channel t1: backup set complete, elapsed time: 00:18:16
channel t1: starting full datafile backup set
channel t1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel t1: starting piece 1 at 08-8月 -18
channel t1: finished piece 1 at 08-8月 -18
piece handle=/bak/rmanbak/20180808/df_983656576_3_1.bak tag=TAG20180808T213800 comment=NONE
channel t1: backup set complete, elapsed time: 00:00:01
Finished backup at 08-8月 -18
released channel: t1
RMAN> alter database open;   #打开数据库

database opened

RMAN> 

2、非归档模式数据库恢复

RMAN> shutdown immediate    #停止数据库

database closed
database dismounted
Oracle instance shut down

RMAN> startup mount   #启动挂载数据库

connected to target database (not started)
Oracle instance started
database mounted

Total System Global Area 535662592 bytes

Fixed Size 1375792 bytes
Variable Size 411042256 bytes
Database Buffers 117440512 bytes
Redo Buffers 5804032 bytes

RMAN> restore database;    #恢复数据库

Starting restore at 03-NOV-11
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=133 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
channel ORA_DISK_1: restoring datafile 00002 to D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
channel ORA_DISK_1: restoring datafile 00004 to D:\ORACLE\ORADATA\ORCL\USERS01.DBF
channel ORA_DISK_1: restoring datafile 00005 to D:\ORACLE\ORADATA\ORCL\TEST01.DBF channel ORA_DISK_1: restoring datafile 00006 to D:\ORACLE\ORADATA\ORCL\UNDOTBS02.DBF
channel ORA_DISK_1: reading from backup piece E:\RMAN_BAK\20111103\DF_766235030_5_1.BAK
channel ORA_DISK_1: piece handle=E:\RMAN_BAK\20111103\DF_766235030_5_1.BAK tag=TAG20111103T110349
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:02:35
Finished restore at 03-NOV-11

RMAN> recover database;   #恢复数据库

Starting recover at 03-NOV-18
using channel ORA_DISK_1

starting media recovery

archived log for thread 1 with sequence 3246 is already on disk as file D:\ORACLE\ORADATA\ORCL\REDO03.LOG archived log for thread 1 with sequence 3247 is already on disk as file D:\ORACLE\ORADATA\ORCL\REDO01.LOG
archived log file name=D:\ORACLE\ORADATA\ORCL\REDO03.LOG thread=1 sequence=3246
archived log file name=D:\ORACLE\ORADATA\ORCL\REDO01.LOG thread=1 sequence=3247
media recovery complete, elapsed time: 00:00:09
Finished recover at 03-NOV-18
打开数据库进行读/写操作时,会立即完成刚刚执行的还原。因此,先先在READ ONLY模式下打开数据库并查看某些数据,检查恢复操作是否符合预期结果。
RMAN> SQL 'ALTER DATABASE OPEN READ ONLY';
#如对恢复结果感到满意,则使用RESETLOGS选项打开数据库
RMAN> alter database open resetlogs;   

database opened

VIA: https://blog.csdn.net/rlhua/article/details/12346829

使用taskkill强制结束进程

在windows系统中有时候会进程卡住、僵死、死锁等用任务管理器无法结束掉程序或进程,可以使用taskkill命令强制结束:
taskkill 命令示例用法:
例如:

    TASKKILL /F /IM cmd.exe /T
    TASKKILL /PID 1000 /T /F
    TASKKILL /IM notepad.exe
    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
    TASKKILL /F /IM cmd.exe /T
    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
    TASKKILL /F /FI "USERNAME eq NT AUTHORITYSYSTEM" /IM notepad.exe
    TASKKILL /S system /U domainusername /FI "USERNAME ne NT*" /IM *
    TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"
Taskkill /?运行结果:
TASKKILL [/S system [/U username [/P [password]]]]
         { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]

描述:

使用该工具按照进程 ID (PID) 或映像名称终止任务。
参数列表:
/S        system               指定要连接到的远程系统。
/U       [domain]user     指定应该在哪个用户上下文执行这个命令。
/P        [password]        为提供的用户上下文指定密码。如果忽略,提示输入。
/FI       filter                   应用筛选器以选择一组任务。允许使用 "*"。例如,映像名称 eq acme*
/PID    processid           指定要终止的进程的 PID。使用 TaskList 取得 PID。
/IM     imagename        指定要终止的进程的映像名称。通配符 '*'可用来指定所有任务或映像名称。
/T                                  终止指定的进程和由它启用的子进程。
/F                                  指定强制终止进程。
/?                                  显示帮助消息。

Oracle给用户新增表空间

什么是表空间?
表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表, 所以称作表空间。
创建用户的时候需要指定默认表空间和temp表空间,主要是为了当该用户创建对象不指定表空间时使用默认表空间来存储对象,
而temp表空间是用户执行查询、排序、分组等操作时使用temp表空间来存储临时数据块。

具体过程:
查询所有表空间使用情况 使用DBA权限登陆,执行:

SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC;

为表空间增加数据文件,因为接下来要导入很多很多数据进去,一个数据文件最多只能放32g数据。
增加CUPS_BS_DATA的表空间数据:

ALTER TABLESPACE "NNC_DATA01" ADD DATAFILE '/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/nnc_data01b.dbf' size 15G autoextend on NEXT 1G MAXSIZE UNLIMITED;
--xxxx可以根据业务多加几个,保证够用

查看所有表空间的数据文件及其使用情况:

select
b.file_name 物理文件名,
b.tablespace_name 表空间,
b.bytes/1024/1024 大小M,
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024 已使用M,
substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) 利用率
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_name,b.bytes
order by b.tablespace_name;

Python中字符串拼接方法整理

ython拼接字符串一般有以下几种方法:

1、直接通过(+)操作符拼接

s = 'Hello'+' '+'World'+'!'
print(s)
输出结果:Hello World!

使用这种方式进行字符串连接的操作效率低下,因为python中使用 + 拼接两个字符串时会生成一个新的字符串,生成新的字符串就需要重新申请内存,当拼接字符串较多时自然会影响效率。

2、通过str.join()方法拼接

strlist=['Hello',' ','World','!']
print(''.join(strlist))
输出结果:Hello World!

这种方式一般常使用在将集合转化为字符串,''.join()其中''可以是空字符,也可以是任意其他字符,当是任意其他字符时,集合中字符串会被该字符隔开,例如:

​strlist=['Hello',' ','World','!']
print(','.join(strlist))
输出结果:Hello, ,World,!

3、通过str.format()方法拼接

s='{} {}!'.format('Hello','World')
print(s)
输出结果:Hello World!
通过这种方式拼接字符串需要注意的是字符串中{}的数量要和format方法参数数量一致,否则会报错。

4、通过(%)操作符拼接

s = '%s %s!' % ('Hello', 'World')
print(s)
输出结果:Hello World!

这种方式与str.format()使用方式基本一致。

5、通过()多行拼接

s = (
    'Hello'
    ' '
    'World'
    '!'
)
print(s)
输出结果:Hello World!

python遇到未闭合的小括号,自动将多行拼接为一行。

6、通过string模块中的Template对象拼接

from string import Template
s = Template('${s1} ${s2}!') 
print(s.safe_substitute(s1='Hello',s2='World')) 
输出结果:Hello World!

Template的实现方式是首先通过Template初始化一个字符串。这些字符串中包含了一个个key。通过调用substitute或safe_subsititute,将key值与方法中传递过来的参数对应上,从而实现在指定的位置导入字符串。这种方式的好处是不需要担心参数不一致引发异常,如:

from string import Template
s = Template('${s1} ${s2} ${s3}!') 
print(s.safe_substitute(s1='Hello',s2='World')) 
输出结果:Hello World ${s3}!

7、通过F-strings拼接

在python3.6.2版本中,PEP 498 提出一种新型字符串格式化机制,被称为“字符串插值”或者更常见的一种称呼是F-strings,F-strings提供了一种明确且方便的方式将python表达式嵌入到字符串中来进行格式化:

s1='Hello'
s2='World'
print(f'{s1} {s2}!')
输出结果:Hello World!

在F-strings中我们也可以执行函数:

def power(x):
    return x*x
x=4
print(f'{x} * {x} = {power(x)}')
输出结果:4 * 4 = 16

而且F-strings的运行速度很快,比%-string和str.format()这两种格式化方法都快得多。

Python中使用sys.argv接收传参

sys.argv是获取运行python文件的时候命令行参数

下面的代码文件是a.py

#encoding=utf-8
import sys
a=sys.argv[0]
b=sys.argv[1]
c=sys.argv[2]
print("filename:",a)
print("param1:",b)
print("param2:",c)

进入文件所在目录,运行python a.py abc 110 输出结果如下

('filename:', 'a.py')
('param1:', 'abc')
('param2:', '110')
sys.argv[0]是文件本身
sys.argv[1]是输入的第一个参数
sys.argv[2]是输入的第二个参数
以此类推

ImportError: No module named pkg_resources解决

这个问题通常是由于升级到python2.7后执行pip产生的,解决方案是重新在python2.7环境中安装pip,步骤如下:

系统:centos7(建议用centos7,6的话需要升级的库太多,glibc也得升级)

第一种安装:

yum install gcc python-setuptools python-devel
easy_install pip

如果不行使用下面步骤:
1.安装distribute

wget https://pypi.python.org/packages/source/d/distribute/distribute-0.7.3.zip --no-check-certificate
unzip distribute-0.7.3.zip
cd distribute-0.7.3
python setup.py install

2.安装setuptool
https://pypi.python.org/pypi/setuptools 下载最新版
解决并进入目录

python setup.py install

3.安装pip

easy_install pip

4.如果安装pip过程中报ImportError: No module named extern异常

https://pypi.python.org/pypi/extern 下载最新extern安装后再次尝试即可

sqlplus登录方式记录

1.本地登录

sqlplus / as sysdba

2.账号密码登录

sqlplus user/passwd

3.选择实例登录

sqlplus user/passwd@实例名   例如 sqlplus user/passwd@orcl

4.连接远程数据库实例

sqlplus user/passwd@IP:端口/实例名 例如:sqlplus user/passwd@192.168.1.2:1521/orcl 

5.远程登录dba实例

sqlplus user/passwd@IP:端口/实例名 as sysdba  例如:sqlplus user/passwd@192.168.1.2:1521/orcl as sysdba

exp导出报错EXP-00091: Exporting questionable statistics问题解决

使用如下命令执行导出操作:

exp user/pass@orcl file=/bak/20180803.dmp log=/bak/20180803.log owner=username buffer=111149600 grants=y 

输出如下信息,其中包含一些EXP-00091的错误提示:

EXP-00091: Exporting questionable statistics.
EXP-00091: Exporting questionable statistics.
. . exporting table                ARAP_BILLCONFER          0 rows exported
EXP-00091: Exporting questionable statistics.
EXP-00091: Exporting questionable statistics.
. . exporting table                   ARAP_BILLMAP     336693 rows exported

导出来的dump文件可用于导入。

看下官方对EXP-00091的介绍:

EXP-00091: Exporting questionable statistics. 
Cause: Export was able export statistics, but the statistics may not be usuable. The statistics are questionable because one or more of the following happened during export: a row error occurred, client character set or NCHARSET does not match with the server, a query clause was specified on export, only certain partitions or subpartitions were exported, or a fatal error occurred while processing a table. 
Action: To export non-questionable statistics, change the client character set or NCHARSET to match the server, export with no query clause, export complete tables. If desired, import parameters can be supplied so that only non-questionable statistics will be imported, and all questionable statistics will be recalculated.

导出过程中,由于客户端字符集或NCHARSET参数和服务器端不一致,导致一些统计信息不可用。解决方案是可以导出不存在问题的统计信息,或者改变客户端字符集或NCHARSET参数。

解决方法:
查询服务器端字符集:

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

设置客户端字符集:

export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

并将这句写入到/home/oracle/.bash_profile文件的最末;

然后重新执行导出,问题解决;

或者在exp导出的时候增加参数(不推荐)

statistics=none   #统计信息字段statistics设置为none

不再报错,但这种方式相当于未导出那些因字符集不一致错误的统计信息,导入自然也不会有这部分统计信息,如果需要,那么只能再重新收集统计信息。

RHEL 6 或者 Oracle Linux 6, 不重启识别新添加的scsi硬盘VM虚拟机同样适用

下面看一下在系统不重启的情况,如何让系统认识新的磁盘,并能对其分区与格式化
1、在开机状态下新增磁盘
2、执行下面的命令

echo "- - -" > /sys/class/scsi_host/host0/scan

注意:
"- – -" 这三个-之间是有空格的
假如 fdisk -l 还是未发现新硬盘,则将上面命令中的host0,替换为host1,host2,....看看

查看系统日志

tail -f /var/log/messages

发现对SCSI设备进行了一次重新扫描,
然后用

fdisk -l

也看到了新增加的磁盘了,然后用fdisk分区并挂载即可;
VIA: https://serverfault.com/questions/490397/what-does-in-echo-sys-class-scsi-host-host0-scan-mean

Apache中 Win32DisableAcceptEx 与MaxRequestsPerChild及参数设置

win系统下apache环境,mpm_winnt.c模式,优化参数:
ThreadsPerChild 说明:每个子进程建立的线程数,默认值:64,最大值:1920。网上查询资料建议设置在100-500之间。如服务器性能高,可设置更大值。
MaxRequestsPerChild 说明:每个子进程在其生存期内允许伺服的最大请求数量,也就是最大线程。如果超过限制,子进程会结束。默认值:0。
推荐MaxRequestsPerChild不要设置为0,设置为非0,可以保护Apache进程免遭内存泄漏的影响,因为你不知道运行在Apache上的应用程式在什么时候会出错导致内存泄漏。

线程设置也不是越大越好,太大会导致产生新的子进程后长期空闲,并非最佳优化。要根据服务器的硬件配置、系统环境、访问流量等调试设置。
如果值太小,也会造成apache频繁重启性能降低,在日志中会出现这样的提示:

Process exiting because it reached MaxRequestsPerChild. Signaling the parent

Win32DisableAcceptEx
使用accept()代替AcceptEx()接受网络链接。AcceptEx()是一个微软的WinSock2 API ,通过使用BSD风格的accept() API提供了性能改善。一些流行的Windows产品,比如防病毒软件或虚拟专用网络软件,会干扰AcceptEx()的正确操作。
如果apache的error.log里面有类似报错,

[warn] (OS 64)指定的网络名不再可用。  : winnt_accept: Asynchronous AcceptEx failed.

可以直接禁用AcceptEx,重启 Apache

<IfModule mpm_winnt.c>
  Win32DisableAcceptEx
  ......
</IfModule>

设置SQL Server最大内存使用量

SQLServer2008版本默认安装以后内存最大使用量为2147483647,基本会把系统内存耗尽,查看当前内存使用情况:

SELECT 
  physical_memory_in_use_kb/1024 AS sql_physical_memory_in_use_MB, 
    large_page_allocations_kb/1024 AS sql_large_page_allocations_MB, 
    locked_page_allocations_kb/1024 AS sql_locked_page_allocations_MB,
    virtual_address_space_reserved_kb/1024 AS sql_VAS_reserved_MB, 
    virtual_address_space_committed_kb/1024 AS sql_VAS_committed_MB, 
    virtual_address_space_available_kb/1024 AS sql_VAS_available_MB,
    page_fault_count AS sql_page_fault_count,
    memory_utilization_percentage AS sql_memory_utilization_percentage, 
    process_physical_memory_low AS sql_process_physical_memory_low, 
    process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;  

SQL.png
设置当前最大内存使用量为16G

sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'max server memory', 16384;  
GO  
RECONFIGURE;  
GO

直接在SQL查询器里面执行即可,一般根据系统内存大小设置,至少保留2--3G内存给操作系统使用;
参考:https://docs.microsoft.com/zh-cn/sql/database-engine/configure-windows/server-memory-server-configuration-options?view=sql-server-2017
也可以在登陆SQLServer以后,右键服务器属性--内存,选择使用AWE分配内存、最小服务器内存、最大服务器内存等参数,如下图,最后确定即可;
memery.png

CentOS下TIME_WAIT过多-问题处理方法

TIME_WAIT状态原理
当客户端主动关闭连接时,会发送最后一个ack,然后会进入TIME_WAIT状态,再停留2个MSL时间(约1-4分钟),进入CLOSED状态。
TCP三次握手四次挥手.png
CentOS6/7.x默认没有对系统参数进行设置,当大量TIME_WAIT产生的时候会影响系统性能,
统计TIME_WAIT状态数量

netstat -ano | grep TIME_WAIT | wc -l

查看系统当前连接状态:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 352
ESTABLISHED 900
CLOSING 58

解决方法如下:
修改内核配置vim /etc/sysctl.conf ,加入以下内容:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

然后执行

/sbin/sysctl -p

让参数生效。

参数说明:

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1  表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout  修改系統默认的 TIMEOUT 时间

更多参考:https://www.unixso.com/Linux/TIME_WAIT.html

Zabbix3.4.11使用Orabbix插件监控Oracle 11g R2

Orabbix简介
Orabbix是设计用来为zabbix监控Oracle的数据库的插件,它提供多层次的监控,包括可用性和服务器性能的指标。
Orabbix监控的内容:

  1、数据库版本
  2、归档日志与生产趋势
  3、触发器,表/过程命中率
  4、逻辑IO性能
  5、物理IO性能
  6、PGA
  7、SGA
  8、共享池
  9、Session
  10、数据库大小

安装步骤如下:
1、JAVA环境配置
若是没有java 需要安装JDK环境:
jdk官方下载地址 http://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz

mkdir /usr/lib/jvm/
tar -xvf jdk-7u80-linux-x64.tar.gz -C /usr/lib/jvm/
echo "export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80" >>  /etc/profile
source /etc/profile
echo "export JRE_HOME=${JAVA_HOME}/jre" >>  /etc/profile
source /etc/profile
echo "export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib" >>  /etc/profile
echo "export PATH=${JAVA_HOME}/bin:$PATH" >>  /etc/profile
source /etc/profile
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_80/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_80/bin/javac 300

安装完毕查看版本:

[root@dbnode1 opt]# java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

2、Orabbix插件的下载安装
http://www.smartmarmot.com/product/orabbix/download/
也可以直接搜索下载,目前最新版本为1.2.3

创建一个目录作为orabbix的源地址:
mkdir -p /usr/local/orabbix
解压缩插件:
unzip -n orabbix-1.2.3.zip -d /usr/local/orabbix/

3、更改配置文件:

cd /usr/local/orabbix/
cp conf/config.props.sample conf/config.props
添加系统启动脚本:
cp init.d/orabbix /etc/init.d/orabbix
并修改路径:
vim /etc/init.d/orabbix
orabbix=/usr/local/orabbix

给启动脚本加执行权限

chmod +x /usr/local/orabbix/run.sh
chmod +x /etc/init.d/orabbix

修改配置文件内如如下

cat /usr/local/orabbix/conf/config.props | grep -v "^$"|grep -v "^#"

ZabbixServerList=ZabbixServer1

ZabbixServer1.Address=192.168.3.209
ZabbixServer1.Port=10051


OrabbixDaemon.PidFile=./logs/orabbix.pid
OrabbixDaemon.Sleep=300
OrabbixDaemon.MaxThreadNumber=100

DatabaseList=dbnode1

DatabaseList.MaxActive=10
DatabaseList.MaxWait=100
DatabaseList.MaxIdle=1

dbnode1.Url=jdbc:oracle:thin:@192.168.2.110:1521:ORCL
dbnode1.User=zabbix
dbnode1.Password=xxxxxxxx
dbnode1.MaxActive=10
dbnode1.MaxWait=100
dbnode1.MaxIdle=1
dbnode1.QueryListFile=./conf/query.props

4、使用DBA账号登陆oracle控制台,创建zabbix用户并赋权

CREATE USER ZABBIX IDENTIFIED BY ZABBIX2018 DEFAULT TABLESPACE SYSTEM TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK;

GRANT ALTER SESSION TO ZABBIX;
GRANT CREATE SESSION TO ZABBIX;
GRANT CONNECT TO ZABBIX;
GRANT RESOURCE TO ZABBIX;
ALTER USER ZABBIX DEFAULT ROLE ALL;
GRANT SELECT ON V_$INSTANCE TO ZABBIX;
GRANT SELECT ON DBA_USERS TO ZABBIX;
GRANT SELECT ON V_$LOG_HISTORY TO ZABBIX;
GRANT SELECT ON V_$PARAMETER TO ZABBIX;
GRANT SELECT ON SYS.DBA_AUDIT_SESSION TO ZABBIX;
GRANT SELECT ON V_$LOCK TO ZABBIX;
GRANT SELECT ON DBA_REGISTRY TO ZABBIX;
GRANT SELECT ON V_$LIBRARYCACHE TO ZABBIX;
GRANT SELECT ON V_$SYSSTAT TO ZABBIX;
GRANT SELECT ON V_$LATCH TO ZABBIX;
GRANT SELECT ON V_$PGASTAT TO ZABBIX;
GRANT SELECT ON V_$SGASTAT TO ZABBIX;
GRANT SELECT ON V_$LIBRARYCACHE TO ZABBIX;
GRANT SELECT ON V_$PROCESS TO ZABBIX;
GRANT SELECT ON DBA_DATA_FILES TO ZABBIX;
GRANT SELECT ON DBA_TEMP_FILES TO ZABBIX;
GRANT SELECT ON DBA_FREE_SPACE TO ZABBIX;
GRANT SELECT ON V_$SYSTEM_EVENT TO ZABBIX;
GRANT SELECT ANY TABLE TO ZABBIX;
GRANT SELECT ANY DICTIONARY TO ZABBIX;
GRANT UNLIMITED TABLESPACE TO ZABBIX;

以下授权需要使用sysdba账号登陆
GRANT SELECT ON V_$LOG_HISTORY TO ZABBIX;
GRANT SELECT ON SYS.DBA_AUDIT_SESSION TO ZABBIX;
GRANT SELECT ON V_$LIBRARYCACHE TO ZABBIX;
GRANT SELECT ON DBA_DATA_FILES TO ZABBIX;
GRANT SELECT ON DBA_TEMP_FILES TO ZABBIX;
GRANT SELECT ON DBA_FREE_SPACE TO ZABBIX;
GRANT SELECT ON V_$SYSTEM_EVENT TO ZABBIX;
GRANT SELECT ON V_$SESSION TO ZABBIX; 
exec dbms_network_acl_admin.create_acl(acl => 'resolve.xml',description => 'resolve acl', principal =>'ZABBIX', is_grant => true, privilege => 'resolve');
exec dbms_network_acl_admin.assign_acl(acl => 'resolve.xml', host =>'*');
COMMIT;

5、启动orabbix服务、加入开机启动:

/etc/init.d/orabbix start
chkconfig orabbix on

6、查看日志

tail -f /usr/local/orabbix/logs 
 2018-07-17 11:36:36,662 [pool-1-thread-1] ERROR Orabbix - Error on DBEnquiry on query=archive on database=dbnode1 Error returned is java.lang.IllegalArgumentException: null value for key 'archive'
 2018-07-17 11:36:36,664 [pool-1-thread-1] WARN  Orabbix - Error while executing ->audit- on database ->dbnode1- Exception received ORA-00942: table or view does not exist

 2018-07-17 11:36:36,665 [pool-1-thread-1] WARN  Orabbix - Error while executing ->dbblockgets- on database ->dbnode1- Exception received ORA-00942: table or view does not exist

 2018-07-17 11:36:36,665 [pool-1-thread-1] ERROR Orabbix - Error on DBEnquiry on query=dbblockgets on database=dbnode1 Error returned is java.lang.IllegalArgumentException: null value for key 'dbblockgets
'
 2018-07-17 11:36:36,666 [pool-1-thread-1] WARN  Orabbix - Error while executing ->dbconsistentgets- on database ->dbnode1- Exception received ORA-00942: table or view does not exist

 2018-07-17 11:36:36,666 [pool-1-thread-1] ERROR Orabbix - Error on DBEnquiry on query=dbconsistentgets on database=dbnode1 Error returned is java.lang.IllegalArgumentException: null value for key 'dbcons
istentgets'
 2018-07-17 11:36:36,667 [pool-1-thread-1] WARN  Orabbix - Error while executing ->dbhitratio- on database ->dbnode1- Exception received ORA-00942: table or view does not exist

 2018-07-17 11:36:36,667 [pool-1-thread-1] ERROR Orabbix - Error on DBEnquiry on query=dbhitratio on database=dbnode1 Error returned is java.lang.IllegalArgumentException: null value for key 'dbhitratio'
 2018-07-17 11:36:36,668 [pool-1-thread-1] WARN  Orabbix - Error while executing ->dbphysicalread- on database ->dbnode1- Exception received ORA-00942: table or view does not exist

 2018-07-17 11:36:36,668 [pool-1-thread-1] ERROR Orabbix - Error on DBEnquiry on query=dbphysicalread on database=dbnode1 Error returned is java.lang.IllegalArgumentException: null value for key 'dbphysic
alread'
 2018-07-17 11:36:36,670 [pool-1-thread-1] WARN  Orabbix - Error while executing ->dbversion- on database ->dbnode1- Exception received ORA-00942: table or view does not exist

如果有以上类似的报错,基本都是zabbix用户权限不够导致,参考赋权;
正常log如下:

 2018-07-20 17:06:16,915 [pool-1-thread-47] INFO  Orabbix - Done with dbJob on database dbnode1 QueryList elapsed time 18537 ms
 2018-07-20 17:06:58,428 [pool-1-thread-48] INFO  Orabbix - Done with dbJob on database dbnode1 QueryList elapsed time 48 ms
 2018-07-20 17:08:16,967 [pool-1-thread-49] INFO  Orabbix - Done with dbJob on database dbnode1 QueryList elapsed time 18586 ms
 2018-07-20 17:08:58,418 [pool-1-thread-50] INFO  Orabbix - Done with dbJob on database dbnode1 QueryList elapsed time 35 ms
 2018-07-20 17:10:17,033 [pool-1-thread-51] INFO  Orabbix - Done with dbJob on database dbnode1 QueryList elapsed time 18648 ms
 2018-07-20 17:10:58,418 [pool-1-thread-52] INFO  Orabbix - Done with dbJob on database dbnode1 QueryList elapsed time 31 ms
 2018-07-20 17:12:17,225 [pool-1-thread-53] INFO  Orabbix - Done with dbJob on database dbnode1 QueryList elapsed time 18836 ms
 2018-07-20 17:12:58,426 [pool-1-thread-54] INFO  Orabbix - Done with dbJob on database dbnode1 QueryList elapsed time 35 ms
 2018-07-20 17:14:17,013 [pool-1-thread-55] INFO  Orabbix - Done with dbJob on database dbnode1 QueryList elapsed time 18621 ms
 2018-07-20 17:14:58,429 [pool-1-thread-56] INFO  Orabbix - Done with dbJob on database dbnode1 QueryList elapsed time 35 ms
 2018-07-20 17:16:17,087 [pool-1-thread-57] INFO  Orabbix - Done with dbJob on database dbnode1 QueryList elapsed time 18691 ms

/usr/local/orabbix下面有个template目录,里面是zabbix模板,将这些模板copy到本地机器上,然后登陆zabbix,把模板导入进去,就可以配置机器了,zabbix是3.x以上版本的话直接导入不进去,只能先导入2.x版本,然后再导出,然后导入3.x
或者直接用修改后Zabbix3.x可以直接使用的模板
zabbix_oracle_orabbix.zip
导入,并添加对应模板即可,完成以后效果如下:
1.png
2.png
3.png
4.png
5.png
10.png
VIA: http://www.smartmarmot.com/wiki/index.php?title=Orabbix
https://blog.csdn.net/tianhua79658788/article/details/77969426

修改oracle数据库SGA和PGA大小

SGA的大小:一般物理内存20%用作操作系统保留,其他80%用于数据库。
SGA普通数据库可以分配40%-60%之间,PGA可以分配20%-40%之间。

1、以dba身份登录
并查看SGA信息:

SQL>show parameter sga;

查看PGA信息:

SQL>show parameter pga;

2、修改sga_target

SQL>alter system set sga_target=436M;

3、修改sga_max_size

SQL> alter system set sga_max_size=436M scope=spfile;

4、重启数据库使其生效:

SQL>shutdown immediate;

注意,重启前一定先完成上述两部操作,且sga_target不得大于sga_max_size,一般保持两者相等,否则可能导致数据库无法启动。

SQL>startup

5、查看SGA是否生效:

SQL>show parameter sga
NAME                                 TYPE        VALUE
------------------------------------ ----------- -----
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 436M
sga_target                           big integer 436M

Zabbix3.4.11使用自带模板监控MySQL

Zabbix默认的agentd模板里面有一个userparameter_mysql.conf配置文件,修改文件内容如下:

[root@c75 zabbix_agentd]# cat /usr/local/zabbix/conf/zabbix_agentd/userparameter_mysql.conf 
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/usr/local/zabbix/conf/ mysql -N | awk '{print $$2}'
UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/usr/local/zabbix/conf/ mysql -N'
UserParameter=mysql.ping,netstat -ntpl |grep 3306 |grep mysql |wc|awk '{print $1}'
UserParameter=mysql.version,mysql -V
UserParameter=mysql.vars[*],echo "show variables where Variable_name='$1';" | HOME=/usr/local/zabbix/conf/ mysql -N | awk '{print $$2}'

做下MySQL的软连接:

ln -s /usr/local/mysql/bin/mysql /bin/

修改zabbix_agentd.conf文件,增加

Include=/usr/local/zabbix/conf/zabbix_agentd/*.conf

登陆MySQL控制台创建只读用户:

GRANT SELECT ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'xxxxxx';

在/usr/local/zabbix/conf创建.my.cnf文件,内容如下:

[root@c75 conf]# cat /usr/local/zabbix/conf/.my.cnf 
# Zabbix Agent
[mysql]
host=localhost
user=zabbix
password="xxxxxx"
socket=/data/mysql/mysql.sock
[mysqladmin]
host=localhost
user=zabbix
password="xxxxxx"
socket=/data/mysql/mysql.sock

重启zabbix-agentd

killall -9 zabbix_agentd
/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/conf/zabbix_agentd.conf

在zabbix-server机器上检测

[root@monitor ~]# zabbix_get -s 192.168.3.244 -p 10050 -k mysql.version
mysql  Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using  EditLine wrapper
[root@monitor ~]# zabbix_get -s 192.168.3.244 -p 10050 -k mysql.ping
1

注意:如果测试的时候报错:sh: mysql: command not found,sh: mysqladmin: command not found,
修改userparameter_mysql.conf中mysql,mysqladmin命令的路径,使用绝对路径或者做下软连接即可;
如果报错

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.

执行的脚本中执行

chmod +s /bin/netstat

来解决chmod +s 的意思是:为了方便普通用户执行一些特权命令,SUID/SGID程序允许普通用户以root身份暂时执行该程序,并在执行结束后再恢复身份
给要监控的主机添加MySQL模板,最后效果如下图:
1.png
2.png

最新

分类

归档

评论

  • Liang: 贴下编译参数和步骤,...
  • shao3911: 您好,为什么我在编译...
  • aliang: 先看是yum安装还是...
  • aliang: 将原来的nginx安...
  • yen: 3、如果要回滚的话,...
  • yen: 刚好需要升级ngin...
  • 文雨: 一些新的method...
  • aliang: 默认不屏蔽估计开发团...
  • 山野愚人居: PHP既然允许直接使...
  • aliang: 最下面有github地址·

其它