Ubuntu 12.04(32位)安装Oracle 11g(32位)全过程以及几乎所有问题的解决办法

这两天在Ubuntu上安装Oracle把人折腾毁了,即使照着网上的教程来,还是出了很多问题。好在最后终于搞定了。写出来总结一下,免得以后忘了。

标题注明32位是因为网上教程几乎全是以64位安装为例的,32位系统下照着做是绝对会安装失败的。

出现的问题主要有两方面,一个是安装过程中出现的,另一个是安装完成后出现的。

安装过程(主要过程就直接copy别人的教程了)及问题:

1.将系统更新到最新:

sudo apt-get update
sudo apt-get dist-upgrade

2.如果使用的Ubuntu不是桌面版(如Ubuntu server),由于Oracle安装需要用到图形界面,所以需要安装桌面程序:

sudo apt-get install gnome-core

相信很多都是使用的桌面版,那么这个步骤就不需要了。

3.  安装Oracle所需的依赖包:

sudo apt-get install automake 

sudo apt-get install autotools-dev
sudo apt-get install binutils
sudo apt-get install bzip2
sudo apt-get install elfutils
sudo apt-get install expat
sudo apt-get install gawk
sudo apt-get install gcc
sudo apt-get install gcc-multilib
sudo apt-get install g++-multilib
sudo apt-get install ia32-libs
sudo apt-get install ksh
sudo apt-get install less
sudo apt-get install lesstif2
sudo apt-get install lesstif2-dev
sudo apt-get install lib32z1
sudo apt-get install libaio1
sudo apt-get install libaio-dev
sudo apt-get install libc6-dev
sudo apt-get install libc6-dev-i386
sudo apt-get install libc6-i386 
sudo apt-get install libelf-dev
sudo apt-get install libltdl-dev
sudo apt-get install libmotif4
sudo apt-get install libodbcinstq4-1 libodbcinstq4-1:i386
sudo apt-get install libpth-dev
sudo apt-get install libpthread-stubs0
sudo apt-get install libpthread-stubs0-dev
sudo apt-get install libstdc++5
sudo apt-get install lsb-cxx
sudo apt-get install make
sudo apt-get install openssh-server
sudo apt-get install pdksh
sudo apt-get install rlwrap
sudo apt-get install rpm
sudo apt-get install sysstat
sudo apt-get install unixodbc
sudo apt-get install unixodbc-dev
sudo apt-get install unzip
sudo apt-get install x11-utils
sudo apt-get install zlibc

很多都是Ubuntu自带的了,谨慎6起见都执行一遍吧。

4.创建用户(此步可省略,直接使用当前的用户即可,下面的安装过程都是以不执行这一步为准的)
sudo groupadd oinstall
sudo groupadd dba
sudo useradd -g oinstall -G dba  -d /opt/oracle -s /bin/bash oracle
sudo passwd oracle
5.检查系统变量

/sbin/sysctl -a | grep sem

/sbin/sysctl -a | grep shm

/sbin/sysctl -a | grep file-max

/sbin/sysctl -a | grep aio-max

/sbin/sysctl -a | grep ip_local_port_range

/sbin/sysctl -a | grep rmem_default

/sbin/sysctl -a | grep rmem_max

/sbin/sysctl -a | grep wmem_default

/sbin/sysctl -a | grep wmem_max


然后根据上面命令中得到的参数值在/etc/sysctl.conf中增加对应数据,比如:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152kernel.shmmax = 536870912
kernel.shmmni = 4096kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144
net.core.wmem_max = 1048586
运行一下命令更新内核参数:
sysctl –p

6.添加对oracle用户的内核限制在 /etc/security/limits.conf 文件中增加以下数据
oracle              soft    nproc   2047

oracle              hard    nproc   16384

oracle              soft    nofile  1024

oracle              hard    nofile  65536

oracle              soft    stack   10240
其中oracle是在第四步中创建的用户,跳过第四步的话就写当前用户

7.查看/etc/pam.d/login,增加以下行(有了就不用增加了):

session required pam_limits.so
同样检查/etc/pam.d/su,没有以下行就自己加上:

session required pam_limits.so

7.创建需要的文件夹(用于安装oracle)并设置其所有权:
mkdir -p /opt/oracle
mkdir -p /opt/oraInventory

chown -R oracle:oinstall  /opt/oracle

chown -R oracle:oinstall  /opt/oraInventory

同样,如果跳过了第四步,那就将所有权设置命令中的用户oracle和组oinstall改为自己当前用户和组(通常二者是一样的),当然这时也可以不执行这两个chown命令,本来目录创建者就是所有者了。另外,需要root权限执行这些命令(sudo,下同)

8.如果Ubuntu上没安装JRE的话,需要安装JRE(我这里直接安装了JDK,以JDK为例):

到Oracle官网下载JDK6(最新为7,考虑到兼容性问题,安装6):

http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html

下载jdk-6u45-linux-i586.bin这个文件。放到主文件夹(home目录)下,进入终端:

$sudo chmod 777 jdk-6u37-linux-x64.bin   // 将文件赋予运行权限  

$sudo -s ./jdk-6u37-linux-x64.bin /usr/lib/jdk  //将JDK安装到/usr/lib/jdk 目录下。

注意:最后安装完成后可能安装到了主文件夹下了,这是使用命令将其全部复制到/usr/lib/jdk目录下即可。(如果没有权限,就使用sudo chmod 777获取权限再复制)

配置JDK的环境变量,使用编辑器打开主文件夹下的.bashrc配置文件(隐藏),向其中加入如下内容:

#JDK
JAVA_HOME=/usr/lib/jdk/jdk1.6.0_45
JRE_HOME=${JAVA_HOME}/jre
export ANDROID_JAVA_HOME=$JAVA_HOME
export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export JAVA_HOME;
export JRE_HOME;
export CLASSPATH;
HOME_BIN=~/bin/
export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN};

注意核对一下目录结构是不是正确的。

最后验证JDK是否安装正确:

java -version

出现了JDK版本信息就表示正确了。

9.为Oracle配置环境变量。同样在主文件夹下的.bashrc配置文件中加入如下内容:

#Oracle
#这个写刚刚创建的文件夹
export ORACLE_BASE=/opt/oracle 
#这个后面可以随便填写
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
#数据库的sid
export ORACLE_SID=orcl

export ORACLE_UNQNAME=orcl
#默认字符集
export NLS_LANG=.AL32UTF8
#环境变量
export PATH=${PATH}:${ORACLE_HOME}/bin/;

10.oracle本身并不支持ubuntu来安装,所以要进行欺骗oracle的安装程序(sudo执行):

ln -s /etc /etc/rc.d

ln -s /lib/i386-linux-gnu/libgcc_s.so.1 /lib/

ln -s /usr/bin/awk /bin/awk

ln -s /usr/bin/basename /bin/basename

ln -s /usr/bin/rpm /bin/rpm

ln -s /usr/lib/i386-linux-gnu/libpthread_nonshared.a /usr/lib/libpthread_nonshared.a

ln -s /usr/lib/i386-linux-gnu/libc_nonshared.a /usr/lib/libc_nonshared.a
ln -s /usr/lib/i386-linux-gnu/libstdc++.so.6 /lib/

ln -s /usr/lib/i386-linux-gnu/libstdc++.so.6 /usr/lib/

 

ln -s /usr/lib/i386-linux-gnu/libstdc++.so.5 /lib/

ln -s /usr/lib/i386-linux-gnu/libstdc++.so.5 /usr/lib/


echo ‘Red Hat Linux release 5’ > /etc/redhat-release

注意:以上命令是对应于32位Ubuntu安装32位Oracle的,如果是64位Ubuntu安装64位Oracle,上面的i386-linux-gnu就都要改成x86_64-linux-gnu,目标目录的lib也要改成lib64.(没有lib64就新建一个)

因为Ubuntu将某些库文件根据32位系统和64位系统分别存放了,但Oracle只认/usr/lib和/lib目录,所以需要进行上面的软链接。

11.下载Oracle安装程序:

http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html

下载Linux x86的那两个文件(64位系统就下Linux x86-64),解压后得到database文件夹。

12.正式安装Oracle,为database文件夹下的runInstaller文件赋予可执行权限:

chmod 777 runInstaller

跳转到database目录,在终端下执行:

./runInstaller

此时可能会出现database目录下部分文件的权限不足,导致安装程序无法启动的问题,根据提示,对那些文件使用chmod 777进行授权就行了(貌似一共3个文件)。

启动安装图形界面后,可能会发现文字乱码,全是口口口:


这时可以关闭该界面,先在终端输入:

export LANG=en_US

或者

export LANG=zh_CN.gbk

然后再执行:

./runInstaller

就可以在全英文界面下进行安装了。

13.安装前进行swap空间检查时可能出现swap空间太小的问题,这一般是由于系统安装时没有创建swap分区,解决办法是创建swap文件来开辟swap空间:

通过下面方法建立swap文件:
#dd if=/dev/zero of=/tmp/swapfree bs=32k count=65515 (count是分区数量,swap大小=bs*count,增加2G)
#mkswap /tmp/swapfree (格式化交换分区文件)
#swapon /tmp/swapfree (启用交换分区文件)
#swapon –s (显示swap状态)
修改/etc/fstab,让系统每次启动都把/tmp/swapfree作为swap使用,增加下面一行:
/tmp/swapfree swap swap defaults 0 0

14.图形安装界面的第一步是填写电子邮件,但是填完可能会出错:Unexpected error occurred while validating inputs at state 'getOCMDetails'。这是由于缺少pdksh依赖包,简单的解决办法是不填写邮件地址,不勾选下面的复选框,直接下一步,弹出提示后点‘Yes’就能直接进入下一步了。完美的解决办法可以到网上去看。


15.剩下的过程基本上很顺利了,只需要设置一下密码就行了,其他的设置都在启动安装程序前完成了,不要进行改动!

16.图形界面下进行依赖检查的时候会列出很多依赖检查失败了,无法进入下一步了,此时选中右上角的‘忽略所有’就可以进入下一步了。

17.如果没有严格按照前面的要求做,安装过程中可能弹出错误,此时不要关闭界面,根据给出的日志位置,在日志中查看错误出现的原因,一般都是指定位置找不到相应的文件导致的,此时打开一个新的终端窗口,找到这些文件并将文件复制到对应的位置或者创建软链接即可。(通常是/usr/lib目录下找不到库文件,这些库文件都位于/usr/lib/i386-linux-gnu目录下了)然后在图形界面点击“Retry‘即可继续安装。

比如:“error in invoking target 'client_sharedlib' of makefile '/opt/oracle11g/server/rdbms/lib/ins_rdbms.mk''这个错误就是没有执行:

 

ln -s /usr/lib/i386-linux-gnu/libpthread_nonshared.a /usr/lib/libpthread_nonshared.a

ln -s /usr/lib/i386-linux-gnu/libc_nonshared.a /usr/lib/libc_nonshared.a

这两个命令导致的(针对32位安装的情况)。

如果严格按照前面的要求做了,上面这种错误是不会出现的。另外,如果32位系统安装64位Oracle或者64位系统安装32位Oracle也是会弹出错误的,错误提示是这样的:

Error in invoking target 'client_sharedlib' of makefile '/opt/app/oracle/product/10.2.0/db_1/network/lib/ins_net_client.mk'

这种错误就只能重新下载正确的Oracle版本再进行安装了。


18.即使严格按照要求做了,还是会出现两个错误:

a.


解决办法:

打开一个新的终端,输入如下命令:

sed -i 's/^\(\s*\$(MK_EMAGENT_NMECTL)\)\s*$/\1 -lnnz11/g' $ORACLE_HOME/sysman/lib/ins_emagent.mk

然后在图形界面点击‘Retry’就能继续安装了。

b.


解决办法:

打开一个新的终端,输入如下四个命令:

sed -i 's/^\(TNSLSNR_LINKLINE.*\$(TNSLSNR_OFILES)\) \(\$(LINKTTLIBS)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/network/lib/env_network.mk

sed -i 's/^\(ORACLE_LINKLINE.*\$(ORACLE_LINKER)\) \(\$(PL_FLAGS)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/rdbms/lib/env_rdbms.mk

sed -i 's/^\(\$LD \$LD_RUNTIME\) \(\$LD_OPT\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/bin/genorasdksh

sed -i 's/^\(\s*\)\(\$(OCRLIBS_DEFAULT)\)/\1 -Wl,--no-as-needed \2/g' $ORACLE_HOME/srvm/lib/ins_srvm.mk

然后在图形界面点击‘Retry’就能继续安装了。

下面的安装过程就没有什么问题了。

19.最后应该就顺利完成了,按照安装程序提示最后执行两个脚本:

sudo /opt/oraInventory/orainstRoot.sh
sudo /opt/oracle/product/11.2.0/dbhome_1/root.sh

就完成了全部的安装。可以通过https://localhost:1158/em进行网络访问了。

安装后的问题

a.终端下使用“emctl start dbcontrol”命令启动em控制台时出现:Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name.的问题,解决办法是设置一个UNQNAME :export ORACLE_UNQNAME=xxxx.

b.设置完成后

在终端使用emctl命令关闭或启动dbconsole(emctl stop dbconsole  , emctl start dbconsole)的时候还可能出错:

OC4J Configuration issue. /opt/oracle/product/11.2.0/dbhome_1/oc4j/j2ee/OC4J_DBConsole_pavilion_orcl not found.
EM Configuration issue. /opt/oracle/product/11.2.0/dbhome_1/pavilion_orcl not found.

出现这种错误的原因是Oracle会根据获取到的系统主机名来选择使用相应的EM资料库关闭或启动em控制器,比如Ubuntu系统安装时给主机起了个pavilion的名称,Oracle获取到的主机名就是pavilion,然后会寻找OC4J_DBConsole_pavilion_orcl 和pavilion_orcl这两个资料库完成关闭或启动em控制器的任务。但是Oracle本身只会根据$ORACLE_HOME/NETWORK/ADMIN/listener.ora文件中的主机名创建资料库。listener.ora中的HOST默认是localhost,所以Oracle默认创建的资料库是OC4J_DBConsole_localhost_orcl 和localhost_orcl。因此才出现上述找不到资料库的问题。

解决此问题的办法是:

将$ORACLE_HOME/NETWORK/ADMIN/listener.ora文件中的HOST=localhost改为HOST=pavilion(paviliion为你的主机名),然后在相应位置完整复制OC4J_DBConsole_localhost_orcl 和localhost_orcl并重命名为OC4J_DBConsole_pavilion_orcl 和pavilion_orcl:

cp -rp /opt/oracle/product/11.2.0/dbhome_1/oc4j/j2ee/OC4J_DBConsole_localhost_orcl  /opt/oracle/product/11.2.0/dbhome_1/oc4j/j2ee/OC4J_DBConsole_pavilion_orcl 

cp -rp /opt/oracle/product/11.2.0/dbhome_1/localhost_orcl  /opt/oracle/product/11.2.0/dbhome_1/pavilion_orcl 

如此就能正常启动和关闭dbcontrol了。

或者可以直接使用

emca -config dbconsole db

命令重新配置一下资料库也可以解决。

另外,修改了Ubuntu主机名或IP地址后同样会导致这样的问题,解决办法也是一样的。

另附EM资料库配置教程:http://ginaduxuefang.iteye.com/blog/1545144

c.EM控制台中的按钮都是口口乱码,其他正常。这是由于Java字体缺失导致的,因为EM的按钮都是Java生成的。解决办法是:

在JDK(或JRE)的字体文件夹下新建中文字体目录fallback,并将Windows系统下的simsun.ttc字体文件复制到fallback下,然后将其改名为simsun.ttf并授予恰当权限:

$ mkdir $ORACLE_HOME/jdk/jre/lib/fonts/fallback

$ cp simsun.ttc  $ORACLE_HOME/jdk/jre/lib/fonts/fallback/

$mv  $ORACLE_HOME/jdk/jre/lib/fonts/fallback/simsun.ttc  $ORACLE_HOME/jdk/jre/lib/fonts/fallback/simsun.ttf

$chmod 444 $ORACLE_HOME/jdk/jre/lib/fonts/fallback/simsun.ttf

后需要清理一下Cache,重启EM即可:
$ rm $ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/em/em/cabo/images/cache/zhs/*.gif
$ emctl stop dbconsole
$ emctl start dbconsole
登陆Web页面查看,EM显示就可以正常显示中文了.

 

d.在终端运行sqlplus  / as sysdba命令进入SQLPlus工具时可能出现错误:

sqlplus: error while loading shared libraries:  /u01/app/oracle/product/11.1.0/db_1/lib/libnnz11.so: cannot restore segment prot after reloc: Permission denied

这是由于SELinux导致的,解决办法是禁用SELinux:

 

更改

/etc/sysconfig/selinux 

文件的内容为

 

SELINUX=disabled

,然后重启

更改/etc/sysconfig/selinux 文件的内容为 SELINUX=disabled,然后重启。

或者使用chcon命令:

chcon -t texrel_shlib_t /usr/local/rsi/idl_6.1/bin/bin.linux.x86/*.so 

e.启动Linstener时可能出现错误:

TNS-12555: TNS:permission denied 

原因是无法访问/var/tmp/.oracle文件夹,解决办法是进行授权:

sudo chmod 777 /var/tmp/.oracle

f.系统关机后每次开机都必须手动启动Oracle,可以编写一个自启动脚本实现每次开机自动启动Oracle,附Oracle启动/关闭方法以及开机自启动脚本:

http://www.cnblogs.com/mchina/archive/2012/11/27/2782993.html

g.卸载Oracle的方法:

1. 运行 $ORACLE_HOME/bin/localconfig delete    
2. rm -rf $ORACLE_BASE/*    
3. rm -f /etc/oraInst.loc /etc/oratab    
4. rm -rf /etc/oracle    
5. rm -f /etc/inittab.cssd    
6. rm -f /usr/local/bin/coraenv /usr/local/bin/dbhome /usr/local/bin/oraenv 
7. rm -rf $ORCLE_HOME 




转载于:https://www.cnblogs.com/xshrim/archive/2013/06/06/4048958.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决asterisk sip呼叫 488 no acceptable here

这两天实验了一下asterisk static realtime方案,将sip.conf的信息保存到mysql数据库里。但是呼叫的时候,总是 报 488 no acceptable here。 这是我的sip.conf文件,数据库里和sip.conf文件一模一样,但是就是不行。 [general] c…

关于浏览器模式和文本模式的困惑

什么是浏览器模式和文本模式? 经常使用IE开发者工具的同学,肯定见过浏览器模式和文本模式,对于这两个名词,综合相关文档解释如下: 浏览器模式(Browser Mode),用于切换IE针对该网页的…

mysql 关联索引_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...

情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?根据查询字段的位置不同来决定,如查询a, a,b a,b,c a,c 都可以走索引的&#…

android学习笔记之ProgressDialog的使用

在很多PC软件或手机软件中,我们都会看见 “加载中...” 类似的对话框,当然,在android应用程序中也是如此。如果我们想在android应用程序中使用这样的效果,那么就需要用到ProgressDialog。首先,我们来看一下ProgressDia…

asterisk 互联问题

asterisk A 和asterisk B互联。 A下面有账户1001,B下面有账户2001 当1001呼叫2001时,B的sip.conf里不能有1001。 当2001呼叫1001时,A的sip.conf里不能有2001。 否则,呼叫无法呼叫成功。 下面为截图 实际和在振铃时&#xff0…

Linux串口编程

.串口概述 常见数据通信方式:并行通信,串行通信 UART的主要操作: >数据发送及接受 >产生中断 >产生波特率 >Loopback模式 >红外模式 >自动流控模式 串口参数的配置主要包括:波特率、数据位、停止位、流控协议…

mysql查当前用户的的命令_mysql命令大全用户管理相关命令

grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。grant select on testdb.* to common_user’%’grant insert on testdb.* to common_user’%’grant update on testdb.* to common_user’%’grant delete on testdb.* to common_user’%’或…

ud分区删除工具_硬盘分区GPT分区怎么转MBR呢?硬盘分区GPT分区转MBR教程

很多用户的电脑预装的是win10系统,想要重装成win7系统。不过新电脑一般都是GPT分区,想要把win10重装成win7,首先需要将GPT分区转MBR。那么,硬盘分区GPT分区怎么转MBR呢?下面就让小编为大家带来硬盘分区GPT分区转MBR教程。提示:单…

使用Preference保存设置

Android中有四种持久化数据的方法:SQLite数据库、文件存储、Preference、ContentProvider。 四种方法各有专攻,而其中Preference是以类似Map的键值对形式存储的,最适合用来保存用户个人设置之类的信息。 可以用一个xml文件来配置一个设置界面…

调用支付jsapi缺少参数package_iOS微信支付(Swift)

前言微信支付的iOS的Demo不言而喻,所有的参数都是后台生成传过来的,完全没参考价值,并且有的注意点文档上也没说,现在我就说一下微信支付开发中需要注意的地方项目配置把实例项目中的一下文件拖到项目中Control文件夹下的WXApiManager.h和WXApiManager.m…

asterisk 支持 VP8 video编码 实现安卓的视频通话

1 :checkout Asterisk source code revision 373330 svn checkout -r 373330 http://svn.digium.com/svn/asterisk/trunk asterisk (下载最新asterisk版本) 2 :asterisk 上面需要打一个补丁支持 VP8 video编码 wget http://sipml5.googlecode.com/svn/trunk/aste…

C++ 11右值引用

C 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的…

C++11中的右值引用及move语义编程

C0x中加入了右值引用,和move函数。右值引用出现之前我们只能用const引用来关联临时对象(右值)(造孽的VS可以用非const引用关联临时对象,请忽略VS),所以我们不能修临时对象的内容,右值…

python入侵数据库数据库_一个简单的Python访问Mysql数据库例子

2020/11/3操作记录搭建好Python的数据环境之后,接下来就是在Python代码中访问数据库我先在Navicat图形化界面创建一个数据库命名为pythontest,再在数据库中创建了一个表studentinfo有nid,nname,ngrade,nage四个字段,nid为主键递增。通过查询编…

r语言散点图_R语言 | 散点图入门:以声学元音图为例

R语言语言学与R语言的碰撞Xu & YangPhoneticSan学习参考Discovering Statistics Using RStatistics for Linguistics with RHow to Do Linguistics with RR in ActionAnalyzing Linguistic DataR Graphics Cookbook Recap可以使用plot( )函数进行基础的制图。调用ggplot2包…

mysql创建表里主码和外码_SQL语言创建表时候怎么定义主码和外码

展开全部SQL语言创建表时候用Primary Key(属性名)定义主码,用Foreign Key(属性名)定义外码。主码是一种唯一关键字,表定62616964757a686964616fe59b9ee7ad9431333433623064义的一部分。一个表的主码可以由多个关键字共同组成,并且主码的列不能…

unity镜头边缘羽化_【后期修图】如何利用Ps中的自适应广角滤波器校正镜头失真?...

当用广角镜头拍摄对象时,透视问题通常以线条的形式出现,这应该是直的,但看起来是弯曲的和扭曲的。这通常被称为桶形失真,其主要发生在广角镜头中,因为图像的放大率越远,主体离镜头的光轴越远。简单来说&…

用引用返回值(转)

函数返回值时&#xff0c;要生成一个值的副本。而用引用返回值时&#xff0c;不生成值的副本。例如&#xff0c;下面的程序是有关引用返回的4种形式&#xff1a;//*********************//**   ch9_6.cpp  **//********************* #include <iostream.h> float tem…

mysql用binlog恢复数据_利用mysql的binlog恢复数据

MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个:* 数据回复* 主从数据库。用于slave端执行增删改&#xff0c;保持与master同步。1.开启binary log功能需要修改mysql的配置文件&#xff0c;本篇的实验环境是win7&#xff0c;配置…

python 怎么处理json_Python是怎样处理json模块的

首先&#xff0c;了解下什么是JSON&#xff1f;JSON&#xff1a;JavaScript Object Notation 【JavaScript 对象表示法】JSON 是一种轻量级的数据交换格式&#xff0c;完全独立于任何程序语言的文本格式。一般&#xff0c;后台应用程序将响应数据封装成JSON格式返回。JSON的基本…