Blog

PFILE和SPFILE

PFILE和SPFILE #

两者的区别 #

  1. PFILE是文本文件而SPFILE是二进制文件。
  2. 在数据库运行时,DBA可以永久改变SPFILE的参数值,但却不能改变PFILE的值。

相互的转换 #

  1. PFILE->SPFILE
CREATE PFILE='PFILE name' FROM SPFILE='SPFILE name';
  1. SPFILE->PFILE
CREATE SPFILE='SPFILE name' FROM PFILE='PFILE name';

备份及恢复SPFILE的步骤 #

create pfile='/home/oracle/pfile.ora' from spfile;
shutdown immediate
startup pfile='/home/oracle/pfile.ora'
create spfile from pfile='/home/oracle/pfile.ora'

From #

启动的三个阶段(Oracle)

Oracle启动三个阶段 #

  1. 启动实例

启动实例需要PFILE或SPFILE。实例启动完成后,数据库还没有和实例关联,处于UNMOUNT状态,此时无法访问数据库。这个阶段主要用于数据库的维护(如重建控制文件等)。控制文件由PFILE或SPFILE指定。

 STARTUP NOMOUNT
  1. 装载数据库

打开控制文件,从控制文件中获得数据文件(datafile)和重做日志文件(redo log file)的名字及位置,此时,数据库处于MOUNT状态,数据库还不可访问。此阶段主要用于恢复数据库等维护任务。

 STARTUP MOUNT ( ALTER DATABASE MOUNT )
  1. 打开数据库

打开数据文件和重做日志文件。

 STARTUP ( ALTER DATABASE OPEN )

From #

cook:sqlplus

技巧 #

  • 知道一条SQL语句的执行时间 SET TIMING ON;
  • 设置显示LONG, BLOB, BFILE, CLOB, NCLOB and XMLType类型的值时的最大长度 SET LONG 10000
  • DEFINE与ACCEPT的区别 DEFINE定义的替换变量只能使用CHAR类型,而ACCEPT默认是NUMBER类型。
  • 去除spool中冗余信息的办法 set linesize 200 set term off verify off feedback off pagesize 999 set markup html on entmap on spool on preformat off spool tables.ods @get_table.sql spool off exit 从shell启动sqlplus直接执行脚本。spool的输出是html格式,把后缀改成ods,即可由openoffice打开。
  • 查看执行计划及统计 SQL>set autotrace on –显示执行计划和统计信息 SQL>set autotrace on explain –只显示执行计划 SQL>set autotrace on statistics –只显示统计信息 SQL>set autotrace traceonly –同autotrace on,但不显示查询结果 SQL>set autotrace off –关闭autotrace

From #

sub:Oracle

Content #

启动的三个阶段(Oracle) 关闭Oracle数据库的四种方式 强制关闭Oracle数据库的方法 PFILE和SPFILE Flashback in Oracle Restore Point

内存管理 #

SGA(System Global Area) 配置SGA静态参数 PGA(Program Global Area)

自动内存管理(Automatic Memory Management)包括SGA的自动管理和PGA的自动管理。

ALTER SYSTEM SET MEMORY_MAX_TARGET=1G SCOPE=BOTH;
ALTER SYSTEM SET MEMORY_TARGET=1G SCOPE=BOTH;

自动SGA管理(Automatic Shared Memory Management) 自动PGA管理(Automatic PGA Memory Management)

将数据常驻内存 将程序常驻内存

cook:sqlplus

ST(Sparse Table,稀疏表)

Content #

ST(Sparse Table,稀疏表)算法采用了 倍增原理,在 O(nlogn)时间构造一个二维表之后,可以在 O(1)时间在线查询[l, r]区间的最值,有效解决在线 RMQ(Range Minimum/Maximum Query,区间最值查询)问题。

设 F[i, j]表示[i, i+2^j-1]区间的最值,区间长度为 2^j。

根据倍增思想,长度为 2^j 的区间可被分成两个长度为 2^(j-1) 的子区间,然后求两个子区间的最值即可。递推公式:

F[i, j]=max(F[i, j-1], F[i+2^(j-1), j-1])

ST创建 #

若数组长度为n,最大区间长度为 \(2^k \le n \le 2^(k+1)\),因此 \[k = \log_2 n\]

for (int i = 1; i <= n; i++) {
  F[i][0] = a[i];
}
int k = log2(n);
for (int j = 1; j <= k; j++) {
  for (int i = 1; i <= n - (1 << j) + 1; i++) {
    F[i][j] = max(F[i][j-1], F[i + 1 << (j - 1)][j - 1])
  }
}

以下面数组为例,写出ST。

...

倍增原理

Content #

任意整数均可被不胜感激成若干个2的次幂项之和。例如5=2^2+2^0. 若问题的状态空间特别大,则一步步递推的算法复杂度太高,可以通过倍增思想,只考察2的整数次幂位置,快速缩小求解范围,直到找到解。

From #

《算法训练营进阶篇》 陈小玉

时间复杂度与问题规模

Content #

如果限制时间为1s,则问题规模(n)和算法时间复杂度之间的关系如下:

  1. n <= 11, O(n!)
  2. n <= 25: O(2^n)
  3. n <= 5000: O(n^2)
  4. n <= 10^6: O(nlogn)
  5. n <= 10^7: O(n)
  6. n > 10^8: O(logn)

找logn的算法主要两种:折半和二进制。

From #

sub:Number Theory

算术基本定理 #

设 \(a > 1\) ,那么必有: \[ a = p_1 p_2 \cdots p_s \] 其中 \(p_j (1 \le j \le s)\) 是素数,且在不计次序的意义下,该表达式是唯一的。

标准素因数分解式 #

\[ a=p_1^{\alpha_1} \cdots p_s^{\alpha_s}, p_1 < p_2 < \cdots < p_s\]

积性函数

数值微分的实现(Python)