好久没有弄 oracle 了,今天有机会又折腾了一天 oracle 的安装,本来觉得是挺简单的事情,没想到也折腾了挺长时间的,我觉得可能主要是因为使用的系统比较新,而 oracle 是 10g 有比较老的缘故。 1 配置 x11forward 我这安装了 xauth 和 libXtst,然后使用 ssh -Y user@host 连接的。使用 -X 好像从来没成功过,也不知道怎么回事,懒得研究了。 2 运行安装程序 解压什么的就没什么好说的了,主要是运行的时候他会检测是不是他支持的发行版,可以使用 -ignoreSysPrereqs,跳过系统检测。 然后其他正常,就是到最后运行 dbca 的时候,会 hung 卡在那,等多久都完成不了。这一步做的操作是会给你 create database,建 init 文件等,没这个的话 oracle 是不可用的。如果你知道手动操作这些后续步骤也可以不理会这个。 dbca 卡住后,可以点那个取消,然后再开一个 term, ps 找到 dbca 然后 kill 掉,前面那个界面应该就会有反应了,就可以继续往下走了。到最后 exit 了事。 然后就是单独启动 dbca 来完成后面的工作。执行 dbca 命令(需要你提前配置好 path),会启动一个窗口,要注意的是,在这时候能看到一个关于字体的错误,据说这个错误就是上面 huang [...]
eygle 有篇文章讲了这个,之前也看过。昨天实际操作了一下。 因为如 eygle 所讲,kill 了 session 之后,操作系统里面的进程资源有时候不一定会立即释放,所以最好在 kill 之前就找到系统的进程 id,这样,如果不释放的时候,可以直接kill。省的之后找起来麻烦。 昨天操作的时候有这么几个步骤 select * from v$session where username like ‘UP’ –先找到这个用户的 session。 select * from v$sql a, v$session b where b.username = ‘UP’ and a.sql_id = b.sql_id –找出来这个用户这些 session 对应的 sql 语句,好确认 session 的 id。 select * from v$process a, v$session b where a.addr = [...]
这几天遇到了这两个错误,记录一下。 使用 perl 的 DBI 连接的时候,会提示 ora-00257 错误,这个用 三qlplus 估计也是一样的错误,注意时远程连接才出错。 DBI connect(‘host=db8.xxx;sid=nirv3′,’sirenmon’,…) failed: ORA-00257: archiver error. Connect internal only, until freed. (DBD ERROR: OCISessionBegin) at ./check_sdsdb line 26 CRITICAL : Can’t connect "db8.sds.cnb.yahoo.com" 同时,数据库的alert 里面有下面的信息 Errors in file /home/oracle/app/diag/rdbms/nirv/nirv3/trace/nirv3_arc1_9507.trc: ORA-19815: WARNING: db_recovery_file_dest_size of 268435456000 bytes is 100.00% used, and has 0 remaining bytes available. ************************************************************************ [...]
还是高级复制的问题,这次可能是因为job执行过程中,对方机器刚好重启导致的。反正job是卡在那里了,都10多天了。 查看 dba_jobs_running 表,可以看到卡住的job的 job_id 和 sid 。查看 dba_jobs 表,可以看到相应 job 的信息,this_date 如果有数据的话,表示的是 job 开始执行的时间,next_date 是下次执行 job 的时间,如果 job 正常执行完毕,那么 this_date 应该是空的。根据 sid 还可以查看 v$session_wait 和 v$session 里面的这个 job 的一些状态。 尝试了下面的方法来重新运行job,当时好像不好用,不过今天来看的时候,job是执行了。现在也不清楚是不是我这个操作起作用了,真晕。 SQL> exec dbms_job.broken(109,true); PL/SQL procedure successfully completed. SQL> commit; Commit complete. SQL> select job,sid from dba_jobs_running; JOB SID ———- [...]
resin 2.x 的配置方法和 3.x 的方法有区别。按照官方文档,做下面的配置。 <database> <jndi-name>oraPool</jndi-name> <driver> <type>oracle.jdbc.pool.OracleConnectionPoolDataSource</type> <url>jdbc:oracle:thin:@localhost:1521:dbname</url> <user>username</user> <password>password</password> </driver> #…. </database> 在上面的 …. 这里还可以添加其他的配置信息。配置好之后启动resin,会发现提示类似下面的信息。 conf/resin.conf:218: java.lang.ClassNotFoundException: oracle.jdbc.pool.OracleConnectionPoolDataSource 提示没有找到连接oracle数据库的jdbc驱动。这个驱动在oracle的安装目录里面有。比如我这里是在 /db/oracle/10.1.0/product/10g/jdbc/lib/ 。里面好多文件,具体都什么作用可以看这里。 复制这个目录里面的 classes12.jar 和 nls_charset12.jar 到resin的 lib 目录下面,重新启动 resin 就可以了。本文完成过程中参考了这篇文章。如何使用这个pool,官方文档也有说明。
早上来了同事就来找我,有两台同步的服务器数据库没有同步成功,查查咋回事。 一台A,从B处同步。蒙了一下,果然有个dba_jobs表,呵呵。 SELECT job,log_user,last_date,next_date,failures,broken,what FROM dba_jobs; 在A处执行上面的命令,好像repadmin的job都在正常执行。 在B处执行上面的命令,能查到类似下面的信息 JOB LOG_USER LAST_DATE ———- —————————— ——————- NEXT_DATE FAILURES B ——————- ———- – 47 repadmin 2006-05-16 19:37:29 4001-01-01 00:00:00 16 Y 显然是job挂了。查看了一下挂的时间,原来是联通机房机柜断电那天,A机器在联通机房,那天断电了6个小时。B机器上面的同步尝试了16次之后就挂起了。解决方法也不难,用repadmin用户登录,然后执行下面的语句,谁的job只能由谁来执行: EXECUTE DBMS_JOB.broken(47,FALSE,sysdate); 47是job id,sysdate表示当前时间。等会再看吧,执行成功之后会把 failures 重新计数,B变成N。
第1部分 安装操作系统 首先需要安装系统….Red Hat Enterprise Linux 2.1,Red Hat Enterprise Linux 3,Novell SUSE Linux Enterprise Server 8 是通过 oracle 10g认证的三个linux发行套件,不知道oracle 10.3有没有对这个修改。默认情况下,oracle 10g只能在rh的这两个版本安装,如果不是上面两个,运行安装程序会直接打印错误。不过也有方法在别的版本安装的,后面有说明。 按照上一篇文章,安装linux的时候可以不选择图形界面,这样还可以节省不少空间。按照oracle的文档,说需要安装下面的这些软件包。 rpm -q gcc make binutils openmotif setarch compat-db compat-gcc \ compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel 我实际安装过程中,compat-gcc compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel 这几个包我没有安装也可以安装oracle。
oracle 的手册里面讲的通常都是图形界面下面的安装,就是用oracle登录桌面,然后运行安装程序的方法。可实际上维护服务器的时候,大多用的还是远程文本界面。这样很有必要看看如何通过文本界面来安装oracle。 oracle本身的安装程序也提供了这个方法,就是使用 responseFile 。这个 responseFile 其实就是在图形界面安装的时候的一些选择,保存到文件之后,直接告诉安装程序从这里读取设置就好了。将oracle的安装文件 ship.db.lnx32.cpio.gz 解压: gunzip ship.db.lnx32.cpio.gz cpio -idmv < ship.db.cpio 这样可以看到有个Disk1的文件夹,里面有个response目录,里面好多response文件,不过我还不知道这些有什么区别,里面设置项也很多,还没弄明白。我使用的不是这里的response文件。是通过下面的方法获取的rsp文件。 可以通过在记录模式中运行软件或通过手动编辑示例响应文件来创建响应文件。以下是一个基本演示: 1. 用此命令启动 OUI 来创建响应文件: ./runInstaller -record -destinationFile /tmp/recorded.rsp 2. 选择您需要的所有部分(源目标目录、主目录、主目录名、产品)。 3. 当您看到 Summary 屏幕时,不要单击 Install,而是单击 Cancel。 4. 仔细查看在 tmp/recorded.rsp 中创建的结果响应文件。如果需要,可以手动编辑该文件,只要您遵守使用规定的格式即可(请参见文档)。 5. 现在如下执行静默安装: ./runInstaller -silent -responseFile /tmp/recorded.rsp 在运行脚本时将会报告安装的进度。 如果您由于响应文件中的条目不正确而遇到安装故障,安装将失败并显示一条诊断消息。详细信息可在 oraInventory/logs 目录中找到。在每次使用响应文件运行 OUI 时,会创建具有 installActions-.log 和 silentInstall.log 格式名称的日志。 这样,只需要找台机器在图形界面下面运行一下安装程序,生成一个rsp文件,然后放到真正需要安装的服务器上面,修改一下安装路径,设置一下sys密码,就可以开始安装了。
oracle的数据库文件一旦建立就会一直占用磁盘空间,表空间用尽的时候,就需要为表空间添加数据文件。可是,从表里面删除数据的时候,表空间却不会释放,所以磁盘空间占用只会越来越大。前段时间一个数据库的表空间不足了,放数据的分区也磁盘空间不足了,必须得想办法释放一下空间才行,操作说起来其实也简单,就是倒腾。 操作值钱咱先给现在的表空间做一个备份。然后新建一个用户,给这个用户建立表空间,按照备份的大小添加数据文件。然后将备份导入新的表空间,切换应用使用的用户。删除之前用户的表空间,删除数据文件。然后给他重新建立表空间数据文件,切换回来。然后将新的用户里面的数据导出,导入到旧的用户下面。这样就操作完了。 导出导入的时候可以按照exp和imp帮助里面的那个例子,row=n表示不倒数据,只导结构。这样导出似乎也会有些问题,什么seq不会倒出来,需要重新弄,不太明白这个。
切换到oracle用户 sqlplus conn / AS sysdba DROP USER <USER> cascade; CREATE USER <USER> IDENTIFIED BY <PASSWORD> DEFAULT tablespace <TABLESPACE>; exit imp <USER>/<PASSWORD> file=<FILE_NAME> fromuser=<USER> touser=<USER> *为要恢复的用户,为其密