今天发现一个Oracle测试库的字符集设置不正确,原本的字符集是UTF-8,正确的字符集应该是ZHS16GBK,因为UTF-8是ZHS16GBK的超集,无法修改,只能重建数据库,幸好该测试库上还没有数据。

虽然用DBCA也可以创建数据库,但我个人更喜欢手工创建数据库,其主要步骤如下(数据库版本11.2):

1. 设置ORACLE_SID

默认的ORACLE_SID是orcl,我个人强烈建议起个唯一、且意义的名字,比如**testdb,**proddb等等,在Oracle用户下执行:

  1. export ORACLE_SID=lxdbtest
export ORACLE_SID=lxdbtest

2. 重建PFILE

在$ORACLE_HOME/dbs目录下重建pfile(initORACLE_SID.ora,本例为initlxdbtest.ora),除了以下三个参数,其它参数都可以不用设置(使用默认值):

  1. db_name=lxdbtest
  2. control_files='/home/oracle/app/oradata/lxdbtest/control01.ctl','/home/oracle/app/oradata/lxdbtest/control02.ctl','/home/oracle/app/oradata/lxdbtest/control03.ctl'
  3. memory_target=2G
db_name=lxdbtest
control_files='/home/oracle/app/oradata/lxdbtest/control01.ctl','/home/oracle/app/oradata/lxdbtest/control02.ctl','/home/oracle/app/oradata/lxdbtest/control03.ctl'
memory_target=2G

为了安全起见,控制文件一定要指定多份,在生产库上,要把它们分开放在不同的物理磁盘上,这里因为是测试库,所以才放在同一个磁盘上。

3. 启动实例至nomount状态

有了pfile就可以启动实例至nomount状态了:

  1. $ sqlplus / as sysdba
  2. SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 25 21:01:16 2013
  3. Copyright (c) 1982, 2009, Oracle.  All rights reserved.
  4. Connected to an idle instance.
  5. SQL> startup nomount
  6. ORACLE instance started.
  7. Total System Global Area 2137886720 bytes
  8. Fixed Size                  2215064 bytes
  9. Variable Size            1224737640 bytes
  10. Database Buffers          905969664 bytes
  11. Redo Buffers                4964352 bytes
  12. SQL>
$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 25 21:01:16 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup nomount
ORACLE instance started. Total System Global Area 2137886720 bytes
Fixed Size 2215064 bytes
Variable Size 1224737640 bytes
Database Buffers 905969664 bytes
Redo Buffers 4964352 bytes
SQL>

4. 执行CREATE DATABASE语句

  1. CREATE DATABASE lxdbtest
  2. LOGFILE GROUP 1 ('/home/oracle/app/oradata/lxdbtest/redo01a.log','/data/oradata/lxdbtest/redo01b.log') SIZE 100M BLOCKSIZE 512,
  3. GROUP 2 ('/home/oracle/app/oradata/lxdbtest/redo02a.log','/data/oradata/lxdbtest/redo02b.log') SIZE 100M BLOCKSIZE 512,
  4. GROUP 3 ('/home/oracle/app/oradata/lxdbtest/redo03a.log','/data/oradata/lxdbtest/redo03b.log') SIZE 100M BLOCKSIZE 512
  5. MAXLOGFILES 5
  6. MAXLOGMEMBERS 5
  7. MAXLOGHISTORY 1
  8. MAXDATAFILES 600
  9. CHARACTER SET ZHS16GBK
  10. NATIONAL CHARACTER SET AL16UTF16
  11. EXTENT MANAGEMENT LOCAL
  12. DATAFILE '/home/oracle/app/oradata/lxdbtest/system01.dbf' SIZE 2048M REUSE AUTOEXTEND OFF
  13. SYSAUX DATAFILE '/home/oracle/app/oradata/lxdbtest/sysaux01.dbf' SIZE 2048M REUSE AUTOEXTEND OFF
  14. DEFAULT TABLESPACE users
  15. DATAFILE '/home/oracle/app/oradata/lxdbtest/users01.dbf'
  16. SIZE 2048M REUSE AUTOEXTEND OFF
  17. DEFAULT TEMPORARY TABLESPACE temptbs
  18. TEMPFILE '/home/oracle/app/oradata/lxdbtest/temp01.dbf'
  19. SIZE 2048M REUSE AUTOEXTEND OFF
  20. UNDO TABLESPACE undotbs
  21. DATAFILE '/home/oracle/app/oradata/lxdbtest/undotbs01.dbf'
  22. SIZE 2048M REUSE AUTOEXTEND OFF;
CREATE DATABASE lxdbtest
LOGFILE GROUP 1 ('/home/oracle/app/oradata/lxdbtest/redo01a.log','/data/oradata/lxdbtest/redo01b.log') SIZE 100M BLOCKSIZE 512,
GROUP 2 ('/home/oracle/app/oradata/lxdbtest/redo02a.log','/data/oradata/lxdbtest/redo02b.log') SIZE 100M BLOCKSIZE 512,
GROUP 3 ('/home/oracle/app/oradata/lxdbtest/redo03a.log','/data/oradata/lxdbtest/redo03b.log') SIZE 100M BLOCKSIZE 512
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 600
CHARACTER SET ZHS16GBK
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/home/oracle/app/oradata/lxdbtest/system01.dbf' SIZE 2048M REUSE AUTOEXTEND OFF
SYSAUX DATAFILE '/home/oracle/app/oradata/lxdbtest/sysaux01.dbf' SIZE 2048M REUSE AUTOEXTEND OFF
DEFAULT TABLESPACE users
DATAFILE '/home/oracle/app/oradata/lxdbtest/users01.dbf'
SIZE 2048M REUSE AUTOEXTEND OFF
DEFAULT TEMPORARY TABLESPACE temptbs
TEMPFILE '/home/oracle/app/oradata/lxdbtest/temp01.dbf'
SIZE 2048M REUSE AUTOEXTEND OFF
UNDO TABLESPACE undotbs
DATAFILE '/home/oracle/app/oradata/lxdbtest/undotbs01.dbf'
SIZE 2048M REUSE AUTOEXTEND OFF;

有几点需要注意:

1)每个日志文件组的日志要放在不同的物理磁盘上,万一有一个磁盘损坏,也不会丢失数据

2)根据需要选择合适的字符集

3)创建了5个基本的表空间:SYSTEM,SYSAUX,默认表空间,默认临时表空间,默认UNDO表空间

5. 根据需要创建应用程序所需的表空间

对于关键业务的数据,应该创建单独的表空间给它使用(最好把表和索引分开放在表空间)

  1. SQL> create tablespace p95169tbs
  2. 2  datafile '/home/oracle/app/oradata/lxdbtest/p95169tbs01.dbf' size 10G,
  3. 3  '/home/oracle/app/oradata/lxdbtest/p95169tbs02.dbf' size 10G;
  4. Tablespace created.
SQL> create tablespace p95169tbs
2 datafile '/home/oracle/app/oradata/lxdbtest/p95169tbs01.dbf' size 10G,
3 '/home/oracle/app/oradata/lxdbtest/p95169tbs02.dbf' size 10G; Tablespace created.

6. 构建数据字典视图

  1. @?/rdbms/admin/catalog.sql
  2. @?/rdbms/admin/catproc.sql
  3. @?/sqlplus/admin/pupbld.sql
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
@?/sqlplus/admin/pupbld.sql

7. 修改system,sys的密码

  1. alter user sys identified by ***;
  2. alter user system identified by ***;
alter user sys identified by ***;
alter user system identified by ***;

8. 创建SPFILE

  1. SQL> create spfile from pfile;
  2. File created.
SQL> create spfile from pfile;

File created.

重启数据库后,将以spfile取代pfile.

最后,再顺便说下如何删除数据库。在删除数据库之前,数据库必须是在mount和restricted session状态,具体如下:

  1. SQL> startup mount
  2. SQL> alter system enable restricted session;
  3. System altered.
  4. SQL> drop database;
  5. Database dropped.
SQL> startup mount

SQL> alter system enable restricted session;

System altered.

SQL> drop database;

Database dropped.

数据库删除成功后,所有的在线日志文件、数据文件都会一并被删除,但归档日志和备份文件不会被删除。

【转载】[Oracle] Linux下手动创建数据库过程的更多相关文章

  1. 关于linux下DB2创建数据库报错问题

    公司业务需要,把服务搭在中标下,在中标下装了DB2 Express-C v9.7.1,之前用着没有问题,隔了一段时间没用,最近又需要用到它,出了一些菜鸟问题,记录下来以免有人和我犯同样的错误...进入 ...

  2. 详解Oracle手动创建数据库几大步骤

    在这里我们将介绍Oracle手动创建数据库几大步骤,包括前期的准备工作,以及具体的实施. Oracle手动创建数据库是本文介绍的重点,希望通过本文能帮助大家更好的利用Oracle.51CTO也向您推荐 ...

  3. windows下数据库文件使用脚本同步到linux下的mysql数据库中

    1.背景 windows server 2008 下 每天会有 *.sql数据文件 需要上传到linux 中的mysql数据库中 而运维人员是在 windows server 下使用 xshell 连 ...

  4. [转载]实战Linux下VMware虚拟机根目录空间扩充

    [转载]实战Linux下VMware虚拟机根目录空间扩充 (2011-07-31 21:34:34) 转载▼ 标签: 转载   原文地址:实战Linux下VMware虚拟机根目录空间扩充作者:shar ...

  5. Oracle11g手动创建数据库方法

    Oracle11g手动创建数据库方法 参考网页http://www.th7.cn/db/Oracle/201311/36926.shtml 安装路径 我的安装路径是:E:\app\admin\prod ...

  6. Linux下用到数据库sqlite3

    最近在Linux下用到数据库sqlite3,于是开始了该方面的学习. 0. 引言 我们这篇文章主要讲述了如何在C/C++语言中调用 sqlite 的函数接口来实现对数据库的管理, 包括创建数据库.创建 ...

  7. 在linux下手动安装 apache, php, mysql--终极版

    在linux下手动安装 apache, php, mysql: 参考: http://www.cnblogs.com/lufangtao/archive/2012/12/30/2839679.html ...

  8. Linux下如何创建新用户

    Linux下如何创建新用户 Linux系统中,只有root用户有创建其他用户的权限.创建过程如下:   useradd -d /home/newuser newuser(设定了该用户的主目录和用户名) ...

  9. Linux下实现mysql数据库每天自动备份

    Linux下实现mysql数据库每天自动备份 1.基本操作步骤 a.创建备份目录 mkdir -m 777 /home/wwwroot/backup b.创建备份脚本sh vim /home/wwwr ...

随机推荐

  1. Python之实例属性和类属性

    参考原文 廖雪峰Python 实例属性和类属性 在前面已经说过由于Python是动态语言,可以根据类的实例绑定任何的属性. 给实例绑定属性的方法是通过实例变量,或者self变量绑定的: class S ...

  2. 一段简单的手写Java计算器代码

    import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.lang.*; public class Calc ...

  3. cookie domain path 跨域

    1.domain表示的是cookie所在的域,默认为请求的地址,如网址为www.jb51.net/test/test.aspx,那么domain默认为www.jb51.net.而跨域访问,如域A为t1 ...

  4. Luogu P4549 裴蜀定理 / Min

    思路 题目已经给出了正解.我们只需要将裴蜀定理推广到若干数的线性组合就可以做这道题了 要注意的是需要在输入的时候取一个绝对值.因为可能会有负数存在.我之前也写过裴蜀定理的证明,要看的话点这里 吐槽 第 ...

  5. trie字典树模板浅析

    什么是trie? 百度百科 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的 ...

  6. 深入分析同步工具类之CountDownLatch

    概览: CountDownLatch又称闭锁,其作用是让一个或者多个线程挂起,直到其他的线程执行完后恢复挂起的线程,使其继续执行.内部维护着一个静态内部类Sync,该类继承AbstractQueued ...

  7. win10 ubuntu 子系统安装php

    apt-get install python-software-propertiesadd-apt-repository ppa:ondrej/phpapt-get updateapt-get ins ...

  8. SVM简单上手示例

    转载自 百度知道 id:风_南(https://zhidao.baidu.com/usercenter?uid=e9904069236f25705e799313) 转载只为方便学习复习,侵删. 在用s ...

  9. mesh topology for airfoil, wing, blade, turbo

    ref Ch. 5, Anderson, CFD the basics with applications numerical grid generation foundations and appl ...

  10. 【07】AngularJS Filters

    AngularJS Filters 过滤器可以使用一个管道字符(|)添加到表达式和指令中. AngularJS 过滤器 AngularJS 过滤器可用于转换数据: 过滤器 描述 currency[ˈk ...