Skip to content

Latest commit

 

History

History
629 lines (462 loc) · 37.2 KB

DB学习之路.md

File metadata and controls

629 lines (462 loc) · 37.2 KB

DB学习之路 Awesome

通用:

MySQL

SQL Server

SQL Server不同版本的驱动

  • msbase.jar、mssqlserver.jar、msutil.jar 在连接数据时候需要手动导入驱动包,即手动导入class.forName(驱动名称),支持sql2000
  • sqljdbc.jar 应用程序必须首先按class.forName(驱动名称)注册驱动程序。Jdk1.6以上版本不推荐使用.支持sql2005,sql2008
  • sqljdbc4.jar DriverManager.getConnection方法得到了增强,可自动加载 JDBC Driver。因此使用sqljdbc4.jar 类库时,应用程序无需调用 Class.forName 方法来注册或加载驱动程序。调用 DriverManager 类的 getConnection 方法时,会从已注册的 JDBC Driver 集中找到相应的驱动程序。sqljdbc4.jar 文件包括“META-INF/services/java.sql.Driver”文件,后者包含.sqlserver.jdbc.SQLServerDriver 作为已注册的驱动程序。现有的应用程序(当前通过使用 Class.forName 方法加载驱动程序)将继续工作,而无需修改。要求使用 6.0 或更高版本的JRE,支持sql2005,sql2008

全文索引和普通索引的区别

两种索引的功能和结构都是不同的,普通索引的结构主要以B+树和哈希索引为主,用于实现对字段中数据的精确查找,比如查找某个字段值等于给定值的记录,A=10这种查询,因此适合数值型字段和短文本字段。全文索引是用于检索字段中是否包含或不包含指定的关键字,有点像搜索引擎的功能,因此全文索引内部采用的是与搜索引擎相同的倒排索引结构,其原理是对字段中的文本进行分词,然后为每一个出现的单词记录一个索引项,这个索引项中保存了所有出现过该单词的记录的信息,也就是说在索引中找到这个单词后,就知道哪些记录的字段中包含这个单词了。因此适合用大文本字段的查找。大字段之所以不适合做普通索引,最主要的原因是普通索引对检索条件只能进行精确匹配,而大字段中的文本内容很多,通常也不会在这种字段上执行精确的文本匹配查询,而更多的是基于关键字的全文检索查询,例如你查一篇文章信息,你会只输入一些关键字,而不是把整篇文章输入查询(如果有整篇文章也就不用查询了)。而全文索引正是适合这种查询需求。

提示找不到存储过程(SQLServer)

在sql server 里新建了几个存储过程,每次都是建了之后,存储过程是可以看见的,但用exec语句的时候,却一直有红色波浪线提示找不到存储过程,但是直接执行,却又是可以执行成功的,每次都需要重新打开ssms,红色的波浪线提示才会取消。 原因是这样的.你的SQL Server 客户端,在连接到 SQL Server 数据库以后。会自动读取数据库的数据字典信息。也就是当前数据库,有哪些表/字段/视图/存储过程等基础信息。保存在客户端的内存里面。这样。当你在客户端输入 SQL 语句的时候,输入表名字.会自动弹出这个表的字段列表让你选择。但是当你新建了一个对象的时候,例如表或者上面那个例子,新建存储过程abc这个时候,数据库那里已经有存储过程abc 了。但是客户端的缓存里面并没有存储过程 abc 的信息。因为内存里面的信息没有更新。因此在客户端那里。输入EXEC abc,abc下有红线。将客户端关闭后,重新打开,由于客户端重新加载了数据库的基础信息。知道了当前数据库里面,有一个名字叫 abc 的存储过程,因此就不出红线了。

Oracle Database

oracle疑难问题排查集:

PL/SQL Developer

navicat 连接Oracle 报错:Cannot load OCI DLL, 126

windows Server 2008 服务器上安装了Oracle 11g R2,在用Navicat去连接Oracle时,提示以下错误:

Cannot load OCI DLL, 126: Instant Client package is required for Baic and TNS connection ,For more information: http://wiki.navicat.com/wiki/index.php/Instant_client_required

查看上述链接页面提示,Navicat only support 32-bit instant client, 因此,尽管我们安装了64位的Oracle,但由于Navicat仅支持32位的,因此我们还需下载一个32位的客户端, 下载地址:

http://www.oracle.com/technetwork/topics/winsoft-085727.html。

以下为完整的解决方法:

  • 在上述地址中下载文件:instantclient-basic-nt-12.1.0.2.0.zip,
  • 解压此安装包至:D:/app/administrator/product/instantclient_2_2_x32
  • 打开Navicat,选择工具→选项→其他→OCI,然后设置OCI library为:D:app/administrator/product/instantclient_12_2_x32/oci.dll,设置SQL plus为:D:/app/administrator/product/11.2.0/dbhome_1/BIN/sqlplus.exe。确定。
  • 测试成功。

Oracle 11g 默认用户名和密码

安装ORACLE时,若没有为下列用户重设密码,则其默认密码如下:

用户名/密码 登录身份 说明 sys/change_on_install SYSDBA 或 SYSOPER 不能以 NORMAL 登录,可作为默认的系统管理员 system/manager SYSDBA 或 NORMAL 不能以 SYSOPER 登录,可作为默认的系统管理员 sysman/oem_temp sysman 为 oms 的用户名 scott/tiger NORMAL 普通用户 aqadm/aqadm SYSDBA 或 NORMAL 高级队列管理员 Dbsnmp/dbsnmp SYSDBA 或 NORMAL 复制管理员

登录身份:指登录时的Role指定,oracle11g中分SYSDBA和default两种。在安装Oracle 10g的时候,提示创建数据库,在创建的同时提示你输入口令,若此时你输入了密码,在登录数据库的时候用户名sys 对应的密码就应该是你创建数据库时候输入的口令。而非默认的change_on_install.

Oracle 11g服务详细介绍及哪些服务是必须开启的?

成功安装Oracle 11g后,共有7个服务,这七个服务的含义分别为:

  • Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存储基础设备(比如磁盘,阵列等)创建高保真的时间点映像,即映射拷贝(shadow copy)。它可以在多卷或者单个卷上创建映射拷贝,同时不会影响到系统的性能。(非必须启动)
  • OracleDBConsoleorcl:Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl。在运行Enterprise Manager(企业管理器OEM)的时候,需要启动这个服务。(非必须启动)
  • OracleJobSchedulerORCL:Oracle作业调度(定时器)服务,ORCL是Oracle实例标识。(非必须启动)
  • OracleMTSRecoveryService:服务端控制。该服务允许数据库充当一个微软事务服务器MTS、COM/COM+对象和分布式环境下的事务的资源管理器。(非必须启动)
  • OracleOraDb11g_home1ClrAgent:Oracle数据库.NET扩展服务的一部分。 (非必须启动)
  • OracleOraDb11g_home1TNSListener:监听器服务,服务只有在数据库需要远程访问的时候才需要。(非必须启动,下面会有详解)。
  • OracleServiceORCL:数据库服务(数据库实例),是Oracle核心服务该服务,是数据库启动的基础, 只有该服务启动,Oracle数据库才能正常启动。(必须启动)

那么在开发的时候到底需要启动哪些服务呢?对新手来说,要是只用Oracle自带的sql*plus的话,只要启动OracleServiceORCL即可,要是使用PL/SQL Developer等第三方工具的话,OracleOraDb11g_home1TNSListener服务也要开启。OracleDBConsoleorcl是进入基于web的EM必须开启的,其余服务很少用。

注:ORCL是数据库实例名,默认的数据库是ORCL,你可以创建其他的,即OracleService+数据库名。

使sqlplus中方向键可用

使Unix下的sqlplus/rman也像windows下sqlplus/rman命令一样,可以通过左右箭头修改命令,通过上下箭头查看命令历史。The rlwrap (readline wrapper) utility provides a command history and editing of keyboard input for any other command. This is a really handy addition to SQL*Plus and RMAN on Linux. 而rlwrap会用到readline包,首先要安装readline,然后安装rlwrap。

下载

安装(使用root登陆,平台是Solaris,其它类似)

    # install readline:
    gunzip readline-5.0.tar.gz
    tar xvf readline-5.0.tar
    cd readline-5.0
    ./configure
    make
    make install

    # install rlwrap:
    gunzip rlwrap-0.30.tar.gz
    tar xvf rlwrap-0.30.tar
    cd rlwrap-0.30
    ./configure
    make
    make check
    make install

使用

rlwrap sqlplus user/pwd@testdb

可以设别名放到.bash_porfile里,然后直接使用别名即可。

alias rlsqlplus='rlwrap sqlplus'
source ~/.bash_porfile

Oracle安装错误ora-00922(缺少或无效选项)

安装Oracle 11g R2的过程中,在新建数据库实例时出现了该错误,如果选择"忽略"就会出现ora-28000错误。经网络查询验证,这是属于在前面配置管理员密码的时候,采用了数字开头的密码,Oracle貌似对此不支持,但当时不提示出错,晕倒!据说包含其他非法特殊字符也可能产生此问题。

ORA-00922: 选项缺失或无效

错误原因:一般是语句的语法有问题。比如命名不对,关键字写错等等。对于非标准的命名,一般采用双引号来创建。

标识符命名规则:

  • 必须以字母开始。
  • 长度不能超过30个单字节字符。
  • 只能包括A-Z,a-z,0-9,_,$和#。
  • 不能在相同用户下建立两个同名的对象。
  • 不能使用保留字和关键字

ORA-28000: 账户锁定

  • 使用PL/SQL,登录名为system,数据库名称不变,选择类型的时候把Normal修改为Sysdba;
  • 选择myjob,查看users;
  • 选择system,右击点击“编辑”;
  • 修改密码,把“帐户被锁住”的勾去掉;
  • 点击“应用”再点击“关闭”;
  • 重新登录就可以通过验证了

linux/unix平台Oracle sqlplus 中Backspace无法删除字符

Oracle sqlplus在打错字符时我们可以使用ctrl+backspace组合键实现删除功能。但是你一定要使用Backspace键删除的话,会出现^H,无法删除。这是因为linux中对tty设备的字符转换没有配置好,可通过stty命令修改终端配置来实现Backspace删除功能。具体修改办法如下:

    [oracle@www.yeserver.com ~]$ id
    uid=800(oracle) gid=803(oinstall) groups=800(dba),801(oper),803(oinstall)
    [oracle@www.yeserver.com ~]$ stty erase ^h

若要恢复Ctrl+Backspace组合键删除功能,可执行以下命令:

    [oracle@www.yeserver.com ~]$ id
    uid=800(oracle) gid=803(oinstall) groups=800(dba),801(oper),803(oinstall)
    [oracle@www.yeserver.com ~]$ stty erase ^?

同时可通过stty -a查看所有的终端设置

    [oracle@www.yeserver.com ~]$ id
    uid=800(oracle) gid=803(oinstall) groups=800(dba),801(oper),803(oinstall)
    [oracle@www.yeserver.com ~]$ stty -a
    speed 38400 baud; rows 37; columns 122; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; swtch = ; start = ^Q;
    stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
    -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
    -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
    opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
    isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

ORACLE_HOME/ORACLE_SID

ORACLE_HOME 安装目录 ORACLE_SID 实例ID 一台linux机器上安装一个oracle,两个实例,分别对应两个用户。切换到对应用户时 echo $ORACLE_SID会显示各自的实例

oracle 的修改SID

1、检查原来的数据库实例名(sid)

oracle@oracle[/home/oracle]> echo $ORACLE_SID
orcl
oracle@oracle[/home/oracle]> sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 20 11:14:49 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
sys@ORCL> select instance from v$thread;
INSTANCE
--------------------------------------------------------------------------------
orcl

2、关闭数据库

注意不能用shutdown abort,只能是shutdown immediate或shutdown normal

sys@ORCL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ORCL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

3、修改oracle用户的ORACLE_SID环境变量,如由orcl修改为ybbe

4、修改/etc/oratab文件,将sid名由旧的修改为新的,如从orcl修改为ybbe

5、进入到$ORACLE_HOME/dbs目录,将所有文件名中包含原来的sid的修改为对应的新sid的。如我对如下文件修改为其后对应的文件

hc_orcl.dat->hc_ybbe.dat
lkORCL->lkYBBE
orapworcl->orapwybbe
snapcf_orcl.f->snapcf_cnhtm.f
spfileorcl.ora->spfilecnhtm.ora
cd $ORACLE_HOME/dbs
orapwd file=orapwybbe password='ybbe' entries=5 force=y

可以用命令进行对上面的文件进行自动生成

6、使新修改的ORACLE_SID环境变量生效

oracle@oracle[/oracle/app/10.1/dbs]> . ~/.bash_profile
oracle@oracle[/oracle/app/10.1/dbs]> echo $ORACLE_SID
cnhtm

7、重建口令文件

因为口令文件改名后不能在新实例中使用,所以重建

oracle@oracle[/oracle/app/10.1/dbs]> orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=5 force=y
oracle@oracle[/oracle/app/10.1/dbs]> ls -lrt orapw*
-rw-r----- 1 oracle oinstall 2048 Dec 20 11:27 orapwybbe

8、启动数据库

oracle@oracle[/oracle/app/10.1/dbs]> sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 20 11:29:53 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
idle> startup
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218292 bytes
Variable Size 62916876 bytes
Database Buffers 96468992 bytes
Redo Buffers 7168000 bytes
Database mounted.
Database opened.

9、检查数据库实例名。通过如下语句检查数据库实例名,发现实例名已经由orcl变成ybbe

select instance from v$thread;
INSTANCE

ESCAPE关键字用法

  定义:escape关键字经常用于使某些特殊字符,如通配符:'%','_'转义为它们原来的字符的意义,被定义的转义字符通常使用'',但是也可以使用其他的符号。实例:

SQL> select * from t11 where name like '%_%';
SQL> select * from t11 where name like '%\_%' escape '\';

注意:如果是 '/' 作为检索字符, 必须 用 '/' 作为转义符, 正斜扛也一样。

select * from wan_test where psid like '%//%' escape '/'

1.使用 ESCAPE 关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。 2.ESCAPE 'escape_character' 允许在字符串中搜索通配符而不是将其作为通配符使用。escape_character 是放在通配符前表示此特殊用途的字符。

Oracle中session和processes的设置

当Oracle需要启动新的process而又已经达到processes参数时,就会报错:

    00020, 00000, "maximum number of processes (%s) exceeded"
    // *Cause: All process state objects are in use.
    // *Action: Increase the value of the PROCESSES initialization parameter.

当数据库连接的并发用户已经达到sessions这个值时,又有新session连进来,就会报错

    00018, 00000, "maximum number of sessions exceeded"
    // *Cause: All session state objects are in use.
    // *Action: Increase the value of the SESSIONS initialization parameter.

如何使用sqlplus查看、修改processes呢?使用sys,以sysdba权限登录:

    show parameter processes; --显示:processes integer 150
	show parameter sessions; --显示:sessions integer 165
	select count(*) from v$process; --显示当前processes数目
	select  count(*) from v$session; --显示当前sessions数目
    alter system set processes=400 scope = spfile; --显示系统已更改
    show parameter processes; --显示:processes integer 150
    create pfile from spfile; --显示:文件已创建。

    --重启数据库
    shutdown immediate;
    startup
    
    --重启监听
    lsnrctl stop/start/status

    show parameter processes; --显示:processes integer 400
    show parameter session; --显示:sessions integer 445

忘记oracle的sys用户密码怎么修改

忘记除SYS、SYSTEM用户之外的用户的登录密码

CONN SYS/PASS_WORD AS SYSDBA; --用SYS (或SYSTEM)用户登录
ALTER USER user_name IDENTIFIED BY "newpassword"; --修改用户的密码,密码不能是数字开头,否则会出现:ORA-00988: 口令缺失或无效

忘记SYS用户,或者是SYSTEM用户的密码

CONN SYS/PASS_WORD AS SYSDBA; --如果是忘记SYSTEM用户的密码,可以用SYS用户登录。
ALTER USER SYSTEM IDENTIFIED BY "newpassword";

CONN SYSTEM/PASS_WORD AS SYSDBA; --如果是忘记SYS用户的密码,可以用SYSTEM用户登录。
ALTER USER SYS IDENTIFIED BY "newpassword";

SYS,SYSTEM用户的密码都忘记

Oracle提供了两种验证方式,一种是OS验证,另一种密码文件验证方式,如果是第一种方式用以下方法修改密码:

  sqlplus /nolog;
  connect / as sysdba
  alter user sys identified by newpassword;
  alter user system identified by newpassword;

如果是第二种方法可以使用ORAPWD.EXE 工具修改密码。打开命令提示符窗口,输入如下命令:

orapwd file=D:\oracle10g\database\pwdctcsys.ora password=newpassword

这个命令重新生成了数据库的密码文件。密码文件的位置在ORACLE_HOME目录下的\database目录下。这个密码是修改sys用户的密码。除sys其他用户的密码不会改变。也可以下方法修改密码,设定完后,重新启动服务,再次登陆就可以了。

orapwd file=pwdxxx.ora password=newpassword entries=10

DB2

Oracle Berkeley DB

SQLite

mongodb

Teradata

GreenPlum

hbase

Hive

Pig

Others

数据模型

PowerDesigner两张表主键如何设成一致的

设置方法:Tools--->Model Options->Model Settings。在Data Item组框中定义数据项的唯一性代码选项(Unique Code)与重用选项(Allow Reuse)。把allow reuse选上,去掉unique code选项。