2022年9月

应用程序换到另一台机器运行时报错:“Ora-01017:用户名/口令无效; 登录被拒绝。”

检查各配置文件,确认用户名与密码无误,且通过plsql developer等工具都可正常连接,说明另有原因。

后经排查,发现新运行机器安装的是oracle 12.1c客户端,而服务器是12.2c,正是这引起了Ora-01017错误。

解决方法:

1) 在服务器环境,修改sqlnet.ora,添加以下两行:

SQLNET.ALLOWED_LOGON_VERSION_SERVER=10
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10

其中的数字代表了可允许连接的最小版本号。

2) 重启监听服务:lsnrctl restart

3) 重新设置一遍用户密码:

SQL> conn / as sysdba;
SQL>ALTER USER myuser IDENTIFIED BY mypassword;


MySQL中字段类型为 longtext 的字段值保存的是Blob (Binary large objects),所以在导出sql或者将sql查询导出为其他格式的数据时,需要提前将字段类型转换一下,转换方式:

  使用MySQL的CAST()函数或者CONVERT()函数。

语法: CAST(value as type);
       CONVERT(value, type);

示例:

SELECT
	CAST(t.longtextField AS CHAR) AS longtextField
FROM
	tableName t;
SELECT
	CONVERT(t.longtextField, CHAR) AS longtextField
FROM
	tableName t;


export命令

功能说明:设置或显示环境变量。

语  法:export [-fnp][变量名称]=[变量设置值]

补充说明:在shell中执行程序时,shell会提供一组环境变量。 export可新增,修改或删除环境变量,供后续执行的程序使用。

export的效力仅及于该此登陆操作。

参  数:

    -f  代表[变量名称]中为函数名称。

  -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。

  -p  列出所有的shell赋予程序的环境变量。

      一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执行时,它不会自动得到原来脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。

      export命令可以用于传递一个或多个变量的值到任何后继脚本。

 

在 linux 里设置环境变量的三种实现方法(export PATH):

1.直接使用 export 命令 (我们以 mysql 服务举例说明)

[root@liyao ~]# export PATH=$PATH:/usr/local/mysql/bin

查看是否已经设置好,可以使用命令 export 命令来查看,也可以直接$#变量名#来查看

zhongweichaomatoMacBook-Pro:~ zhongweichao$ $PATH

-bash: :/Users/zhongweichao/.local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/zhongweichao/Develop/jboss-5.1.0.GA/bin

需要注意: 直接使用 export 设置的变量都是临时变量,也就是说退出当前的 shell ,为该变量定义的值便不会生效了。如何能让我们定义的变量永久生效呢?那就看我们的第二种定义的方式。

2. 修改 /etc/profile

[root@liyao ~]# vi /etc/profile

export PATH=$PATH:/usr/local/mysql/bin  # 在配置文件中加入此行配置

需要注意的是:修改完这个文件必须要使用 以下命令在不用重启系统的情况下使修改的内容生效。

[root@liyao ~]# source /etc/profile

或者是用 ‘.’:

[root@liyao ~]# . /etc/profile

查看:

[root@liyao ~]# echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin

# 配置已经生效

3. 修改 .bashrc 文件是在当前用户 shell 下生效

# vi /root/.bashrc?在里面加入:

export PATH=$PATH:/usr/local/mysql/bin

修改这个文件之后同样也需要使用 source 或者是 . 使配置文件生效。

再来使用 echo $PATH看下变量是否生效

[root@liyao ~]# echo $PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin

shell与export命令

      用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一 个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。 

      在子 shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内 的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。

一个简单的方法可以知道你的网站是因为什么原因慢:
 1). 如果是因为服务器上网站放的太多的原因,Discuz!程序左下脚的执行时间会比较大,一般会大到几秒,如果那个时间是0.0几秒的话,服务器负载是很清的。
 2).如果是网络原因,这时候你ping 你的域名一般都不理想,或者延迟大,或者丢包多。当然如果是网络慢那还要区分是服务器端网络的问题还是你个人那边网络的问题。
 3).如果排除以上原因,那就要仔细分析了,最常见的原因是挂了统计或广告代码。
 服务器:排除(同ip其它网站访问打开速度正常)
本地网络:排除(打开一些网站速度很快)
插件:排除(只有QQ互联) 页面数据太大 排除(以前打开很快。再说图片都是后加载)
数据库远程连接加载慢

(一) 基本语法 iptables-t filter -A INPUT -p icmp -j DROP 高级语法 iptables-t filter -A INPUT -m mac –mac-source 00:1C:23:3B:2E:B1 -j DROP 区别高级语法与基本语法的不同:首先filter的机制是由iptables_filter.ko模块所提供的功能,而这个模块本身就已提供了一些简单的匹配的过滤方式,而所谓的基本语法是指只使用iptable_filter.ko模块自身所提供的功能。高级语法必须调用其它模块的功能。以高级语法的范例为例,“-mmac”就是告知iptables工具,我们要动用xt_mac.ko模块的功能,由于是调用其它的模块,因此,语法的部分将会随着不同的模块而有所改变,而且每一个模块的语法也不一样,这就是所谓的“高级语法”。 举例1:将222.24.21.195送到本机的ICMP封包丢弃 语法:iptables-A INPUT -p icmp -s 222.24.21.195 -j DROP 语法解释: -AINPUT

保护对象因为本范例所使用的是INPUTChain,故其保护的对象为本机

-picmp

原文-pProtocol(协议)
目的匹配某个特定协议封包,本范例是匹配icmp的封包
语法-p icmp、-ptcp、 -pudp -p all等

-s222.24.21.195

原文-s Source
对应的参数-dDestination
目的匹配封包中“来源”或“目的”端的IP
语法-s222.24.21.195 -s www.baidu.com等,由例子可知,IP位置的表示方法可以用单一IP或标准的CID网段,至于QDN的部分,实际上iptables是把FQDN送至DNS去执行解析,最后加入到规则之中的还是IP

-j

目的JUMP
语法将符合以上两项条件的封包以特定的方式来“处理”

较常见的处理方式:

ACCEPT允许通过
DROP将封包丢弃调,这种处理方式将导致来源端误以为封包丢失,而不断重新发送封包,这个动作将持续到连接Timeout为止
REJECT将封包丢弃掉,并回送一个DestinationUnreachable的ICMP封包给发送端,发送端的应用程序收到这个错误信息封包之后,会终止连接的动作

举例2:不允许222.24.21.195主机通过本机DNS服务来执行名称解析 语法:iptables-A INPUT -p udp -s 222.24.21.195 --dport 53 -j REJECT 语法解释: --dport53

原文--dportDestination Port
对应的参数--sportSource Port
目的匹配TCP、UDP包头中的“来源端Port”或“目的端Port”,这样即可判断连接所要访问的服务,例如:-pudp –dport 53 代表客户端要访问UDP的53port,而UDP的53port就是DNS服务
语法--dport 80、--sport80,但请注意,当时用--dport或--sport参数时,一定要指明是tcp还是udp协议。注意一点:只要规则语法中用到“Port参数”时,一定要加上“-pudp或-ptcp”的参数。

举例3:允许192.168.1.0/24网段的主机对192.168.0.1提出任何的服务请求 语法:iptables-A INPUT -p all -s 192.168.1.0/24 -d 192.168.0.1 -j ACCEPT 语法解释: -pall

目的匹配所有的协议包

-s192.168.1.0/24

目的匹配来源端IP为192.168.1.0/24网段的封包

-jACCEPT

目的开放符合以上3项条件的封包进入

举例4:只允许用户端主机从eth1访问的本机SSH服务 语法: iptables-A INPUT -p tcp -i eth1 --dport 22 -j ACCEPT 语法解释: -ieth1

原文-iin-interface
对应的参数-oout-interface
目的匹配封包的出入接口
语法-i eth1 -oeth2

举例5:不允许本机的应用程序从eth0接口送出封包去访问www.baidu.com网站 语法:iptables-A OUTPUT -o eth0 -p tcp -d www.baidu.com --dport 80 -j REJECT 语法解释: -AOUTPUT

限制的对象因为该例子使用的OUTPUChain,所以目的是限制本机对外的连接

(二) 有上面几个例子了解了iptables的基本语法,下面对参数进行整理总结。 (1)接口的匹配参数

参数名称-i 、-o
参数值参数值会因为防火墙主机所使用的物理接口不同而有所改变,下面列出常见的网络接口名称: * eth0 :以太网络的接口名称。 * ppp0:PPP接口的名称。 * lo :LocalLoopback接口。 * fddi0:光线接口
使用范例-i eth0:匹配从eth0接口送入的封包
意义匹配封包的进出接口
补充可搭配“!”来代表反向,例如,“-i!eth0”即表示匹配不是从eth0接口进入的封包

(2)上层协议(UpperLayer Protocal)的匹配参数

参数名称-p
参数值这些参数会因为匹配的上层协议的不同而有所差异,一般常见的参数如下: * tcp :匹配的上层协议为TCP协议。 * udp :匹配的上层协议为UDP协议。 * icmp :匹配的上层协议为ICMP协议。 * all :匹配所有的上层协议。 关于其它的上层协议可以参考/etc/protocols文档,现在取出一部分内容: ip 0 IP hopopt 0 HOPOPT icmp 1 ICMP igmp 2 IGMP ggp 3 GGP ipencap 4 IP-ENCAP tcp 6 TCP 注:其中第一和第二字段是给系统来使用的,比如说我们写-ptcp还可以写为-p6。因为tcp的代码就是6,第三个字段用于管理员来识别用。

(3)匹配来源/目的的IP地址

参数名称-s -d
参数值来源及目的IP地址匹配,其可接受的IP地址格式如下: *192.168.0.1 :匹配单一IP。 *172.10.0.0/16 :匹配一个Class B的网段。 *192.168.0.0/24 :匹配一个ClassC的网段。 *192.168.0.0/28 :也可以是任何标准CIDR的网段。 * www.qq.com : 也可以是网址,但最后存放到Chain里的值还是IP
使用范例-s192.168.0.1 :匹配从192.168.0.1主机送来的封包 -s192.168.0.0/24 :匹配从192.168.0.0/24网段所送来的封包 -d192.168.0.10 :匹配要送往192.168.0.10主机的封包
意义匹配封包来源或目的IP地址
补充可搭配“!”来代表反向,例如:“-s!192.168.0.0/24”即代表匹配来源端IP不是192.168.0.0/24网段的封包

(4)匹配来源/目的的Port位置

参数名称--sport–dport
参数值我们可以用—sport或—dport来匹配所要访问的服务,例如我们可以用--dport80参数匹配访问WebServer的封包,另外,也可以使用 --sport80参数匹配有WebServer回应给客户端的封包
使用范例--dport 80 :匹配访问的WebServer的封包。 --sport 110:匹配由POP3 Server 回应给客户端的封包。
意义匹配封包来源或目的的Port
补充可以搭配”!“来代表反向,如”--sport! 80“代表匹配不是从WebServer送来的封包

(5)处理方式

参数名称-j
参数值较为常见的3种处理方式,分别如下: * ACCEPT:允许 * DROP :将封包丢弃 * REJECT :将封包丢弃,并回应发送端一个ICMP封包
使用范例-j ACCEPT 允许 -j DROP 将封包丢弃
意义以特定的方式来处理符合条件的封包