Oracle Database

Oracle Database

傻逼甲骨文公司出的傻逼数据库软件

启动 db

# su - oracle # 切换到数据库用户
# export ORACLE_SID=dbname # 使用非默认db时需要
$ lsnrctl start
$ sqlplus /nolog
SQL> conn /as sysdba
SQL> startup

开机自启动

/usr/bin/oracle.sh

#!/bin/sh

# Usage: su oracle -c /usr/bin/oracle.sh

export ORACLE_HOME=/app/oracle/product/11g/db_1
export PATH=$PATH:$ORACLE_HOME/bin

lsnrctl start
dbstart $ORACLE_HOME

Tips & Solutions

ORA-00845: MEMORY_TARGET not supported on this system

You will get a ORA-00845 error if your shared memory file system is not big enough to accommodate memory_target and memory_max_target. There are two possible ways to remove the ORA-00845 error:

  • Reduce the value for the memory_target parameter
  • Increase the temporary memory allocation on the server. This should fix the ORA-00845 error:
umount tmpfs
mount -t tmpfs shmfs -o size=16384m /dev/shm

vim /etc/fstab

#tmpfs                   /dev/shm                tmpfs   defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults,size=16G        0 0

ORA-01653: unable to extend table by in tablespace APUBTBS

Just add a new datafile for the existing tablespace

ALTER TABLESPACE APUBTBS ADD DATAFILE '/u01/oradata/userdata03.dbf' SIZE 2000M;
ALTER TABLESPACE APUBTBS add datafile '/oradata/dbs/apubtbs_new1.dbf'
   size 5000M autoextend on;

To find out the location and size of your data files:

SELECT FILE_NAME, BYTES FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'APUBTBS';

"ORA-28001: The password has expired" Fix

# su - oracle
$ lsnrctl start
$ sqlplus /nolog
SQL> conn /as sysdba
SQL> alter user {{username}} identified by {{password}} account unlock;
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

注:替换 {{username}} 和 {{password}} 为实际的用户名和密码,两边不用加单引号。

我就想说所有“强制密码有效期”的设定都是傻逼。

连接 Oracle tns 时很慢

测试某些环境 Oracle 11g (11.2.0.1.0),客户端建立连接时总是会卡 10s左右。抓包发现客户端连接时 Oracle 服务器会外发1次 AAAA DatabaseName 的 DNS 请求,如果请求无响应会重试一次,如果服务器无法连接 Internet,会表现出 10s 延迟。(DatabaseName 是配置的 Oracle 数据库 SID)。所以在 hosts 里加入相应的记录即可:

/etc/hosts

127.0.0.1 DatabaseName
::1 DatabaseName

傻逼 Java Driver

傻逼 Oracle 的 傻逼 Java 驱动在 傻逼 maven 等仓库都没有,只能到傻逼 Oracle 官网下载。而且傻逼 Oracle 的官网下载文件竟然还要注册。

// 傻逼 Oracle 有好几个版本的 傻逼 Java 驱动,什么 ojdbc6.jar ojdbc7.jar ojdbc14.jar 等等等等。
// 分别对应的是傻逼 Java 6, 傻逼 Java 7, 傻逼 Java 1.4 等。

// ojdbc7.jar

import java.sql.*;
import java.io.*;
import java.util.*;

try {
  // no need for JDBC 4.0+ drivers, which are automatically loaded if found in class path
  // Class.forName("oracle.jdbc.driver.OracleDriver")
  // DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
  // connection string format: (port part omit-table; user / pass can be provided separately)
  // "jdbc:oracle:thin:username/password@host:1521:sid
  // or "jdbc:oracle:thin:username/password@host:1521/service_name"
  Connection con = DriverManager.getConnection("jdbc:oracle:thin:username/password@1.2.3.4:db");
  // Connection con = DriverManager.getConnection("jdbc:oracle:thin:@1.2.3.4:db","username","password");
} catch( Exception e) {
  e.printStackTrace();
}

Dummy table

Use for connection verification

select 1 from DUAL


Last update: 2022-04-11 07:34:05 UTC