A. db2数据库create database on语句是什么意思
C:\Documents and Settings\tstbd>db2 ? create database
CREATE DATABASE database-name
[AT DBPARTITIONNUM | [AUTOMATIC STORAGE {NO | YES}]
[ON drive[{,drive}...][DBPATH ON drive]]
[ALIAS database-alias] [USING CODESET codeset TERRITORY territory]
[COLLATE USING {SYSTEM | IDENTITY | IDENTITY_16BIT | COMPATIBILITY | NLSCHAR | U
[PAGESIZE integer [K]]
[NUMSEGS numsegs] [DFT_EXTENT_SZ dft_extentsize] [RESTRICTIVE]
[CATALOG TABLESPACE tblspace-defn] [USER TABLESPACE tblspace-defn]
[TEMPORARY TABLESPACE tblspace-defn] [WITH "comment-string"] ]
[AUTOCONFIGURE [USING config-keyword value [{,config-keyword value}...]]
[APPLY {DB ONLY | DB AND DBM | NONE}]]
on 代表数据创建在哪个目录下面。
参数详解
1. DATABASE database-name
给数据库指定名称,在本地和系统库中,都必须唯一的,不能包含空格。
2. AT DBPARTITIONNUM
指定数据库将要被创建在发出命令的分区。当创建一个新库,不要指定这个参数。可以用它重建一个因为损坏而删除的数
据库分区。当用这个参数创建库,数据库将处于restore pending状态。不切断应用可能导致不一致,用时谨慎。
3. AUTOMATIC STORAGE NO | YES
指定自动存储打开或关闭。默认是打开的。
4. ON path or drive
这个子句和AUTOMATIC STORAGE的值有关,它指定了DB表空间的容器位置。详细的目录结构如下
/Path or Drive ----------> 数据库目录
|
|------ InstanceName ----------> 实例名
|
|------ NODEnnnn ----------> 节点名
|
|------ DataBaseName ----------> 数据库名
|
|------Tnnnnnnn ----------> 表空间容器
对于AUTOMATIC STORAGE NO:只有一个path可以包含在ON后,它指定了DB的位置。如果没有指定这个参数,DB创建到默认路径中,该默认路径为dbm cfg的dftdbpath指定。
对于AUTOMATIC STORAGE YES:可以列出多个路径,有逗号分隔,这些路径作为存储路径和保存自动存储表空间的容器。对于多分区DB,相同的存储路径被用在所有分区中。
创建数据库后将创建三个缺省表空间:
T0000000子目录中包含带有系统目录表的目录表空间。
T0000001子目录中包含缺省临时表空间。
T0000002子目录中包含缺省用户数据表空间。
每个子目录或容器中都会创建一个名为 sqlTAG.NAM 的文件。这个文件可以标记正在使用中的子目录,因此在以后创建其他表空间时,不会尝试使用这些子目录。
此外,名为 SQL*.DAT 的文件中还存储有关子目录或容器包含的每个表的信息。星号(*)将被唯一的一组数字取代,用来识别每个表。对于每个 SQL*.DAT 文件,可能有一个或多个下列文件,这取决于表类型、表的重组状态或者表是否存在索引、LOB 或 LONG 字段:
SQL*.BKM(如果它是一个 MDC 表,那么它包含块分配信息)
SQL*.LF(包含 LONG VARCHAR 或 LONG VARGRAPHIC 数据)
SQL*.LB(包含 BLOB、CLOB 或 DBCLOB 数据)
SQL*.XDA(包含 XML 数据)
SQL*.LBA(包含有关 SQL*.LB 文件的分配和可用空间信息)
SQL*.INX(包含索引表数据)
SQL*.IN1(包含索引表数据)
SQL*.DTR(包含用于重组 SQL*.DAT 文件的临时数据)
SQL*.LFR(包含用于重组 SQL*.LF 文件的临时数据)
SQL*.RLB(包含用于重组 SQL*.LB 文件的临时数据)
SQL*.RBA(包含用于重组 SQL*.LBA 文件的临时数据)
5、DBPATH ON指定了数据库基础文件(控制文件,日志文件等)的创建位置。如果没有指定,则数据库在ON后面第一
个路径指定。如果没有指定路径,则在默认位置创建,该默认路径为dbm cfg的dftdbpath指定。数据库路径里面创建了
分层目录结构。这个结构保存了数据库操作需要的文件,目录结构具体如下
/Path or Drive ----------> 数据库目录
|
|------ InstanceName ----------> 实例名
|
|------ NODEnnnn ----------> 节点名
|
|------ SQLxxxxx ----------> 数据库编号
| |
| |------SQLOGDIR ----------> 数据库日志目录
|
|------sqldbdir ----------> 本地数据库编目
其中SQLOGDIR目录用来存放数据库日志文件,建库后可以更改日志文件位置
SQLxxxxx目录下包含如下文件
SQLBP.1 和 SQLBP.2 文件中都包含缓冲池信息。这两个文件中具有相同的副本,从而提供备份。
SQLSPCS.1 和 SQLSPCS.2 文件中都包含表空间信息。这两个文件中具有相同的副本,从而提供备份。
SQLSGF.1 和 SQLSGF.2 文件中都包含与数据库的自动存储器相关的存储路径信息。这两个文件中具有相同的副本,从而提供备份。
SQLDBCON 文件中包含数据库配置信息。切勿编辑此文件。要更改配置参数,请使用控制中心或者使用 UPDATE DATABASE CONFIGURATION 和 RESET DATABASE CONFIGURATION 命令。
db2rhist.asc 历史记录文件及其备份 db2rhist.bak 中包含关于备份、复原、表装入、表重组、表空间改变和其他数据库更改的历史记录信息。
DB2TSCHNG.HIS文件中包含日志文件级别的表空间更改的历史记录。对于每个日志文件,DB2TSCHG.HIS中包含有助于确定日志文件影响哪些表空间的信息。表空间恢复使用此文件中的信息来确定在进行表空间恢复期间要处理哪些日志文件。可以在文本编辑器中检查这两个历史记录文件中的内容。
日志控制文件 SQLOGCTL.LFH 和 SQLOGMIR.LFH 中包含有关活动日志的信息。
恢复处理过程使用这些文件中的信息来确定要在日志中后退多远来开始恢复。SQLOGDIR子目录中包含实际的日志文件。
注:您应确保不要将日志子目录映射到用于存储数据的磁盘。这样,在磁盘发生问题时,只会影响到数据或日志,而不会同时影响这两者。由于日志文件与数据库容器不会争用同一磁盘磁头的移动,因此这可提供很多性能方面的好处。要更改日志子目录的位置,请更改 newlogpath数据库配置参数。
SQLINSLK文件用于确保一个数据库只能由数据库管理器的一个实例使用。
在创建数据库的同时,还在db2event目录下创建了详细死锁事件监视器。详细死锁事件监视器文件存储在目录节点的数据库目录中。当事件监视器达到它要输出的最大文件数 时,它将取消激活,并且将把一条消息写入通知日志中。这样可防止事件监视器消耗过多的磁盘空间。除去不再需要的输出文件将允许在下一次数据库激活时再次激 活事件监视器。
DBPATH ON选项可以被用来把以上文件和信息,放在一个与数据库数据存储路径分开的路径中。当使用automatic storage时,建议将数据库的information和数据库的data分开。
对于MPP系统,数据库不能建在NFS文件夹中,不能是相对路径。每个给出的路径必须在每个数据库分区中存在并可访问。
database path最长215字符,storage path最长175字符。
5. ALIAS database-alias
在database directory中,数据库的别名。如果没指定,就用数据库名称。
6. USING CODESET codeset
指定数据进入数据库所使用的编码集。创建数据库后,不能修改。
7. TERRITORY territory
指定数据库进入数据库所使用的区域标示符或本地标示符。创建数据库后,不能修改。code set和territory的组合,必须是有效的。
B. Android 请问如何更改android 数据库的存储路径
These files will be ones that get deleted first when the device runs low on storage. There is no guarantee when these files will be deleted.
但是,最好不要依赖系统来管携吵理,应该自己设定一个最大容量,当超出这个值时自己删除。
Context.getFilesDir(),Context.openFileOutput(String, int),Context.getFileStreamPath(String),Context.getDir(String, int)
/data/data/files
Android支持在SD卡上的应用私有目录,核隐庆在改握Froyo版本后,通过getExternalFilesDir()可以获得具体路径。该路径依赖与应用的包名,如果你包为hello.file那么SD开上的应用私有目录为\mnt\sdcard\Android\data\hello.file\files\.
在使用SD卡目录时,需注意SD卡是否挂载,可通过Environment.getExternalStorageState()方法进行判断,如果返回值为Envirnment.MEDIA_MOUNTED表示SD卡处于挂载状态,可以放心使用。
getExternalCacheDir()和getCacheDir()比较
共同点:
files will be deleted when the application is uninstalled
不同点:
1、The platform does not monitor the space available in external storage, and thus will not automatically delete these files. Note that you should be managing the maximum space you will use for these anyway, just like with getCacheDir().
2、External files are not always available: they will disappear if the user mounts the external storage on a computer or removes it. See the APIs on Environment for information in the storage state.
3、There is no security enforced with these files. All applications can read and write files placed here.
C. 我把DB2数据库安装完了,谁能告诉我如何创建数据库
这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是: SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。 TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。 USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。 对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。 对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。 以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统下的 D: 驱动器上的 TEST 目录中: CREATE DATABASE MYDB ON D:\TEST选择Automatic storage(默认设铅前置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。 CREATE DATABASE TEST AUTOMATIC STORAGE ON /db2/storagepath001, /db2/storagepath002, /db2/storagepath003 AUTORESIZE YES INITIALSIZE 300 M INCREASESIZE 75 M MAXSIZE NONE在AUTOMATED STORAGE ON 选项后面,给出了三巧激运个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是: AUTORESIZE YES 当表空间用光空间时,系统将自动地扩展容器的大小。 INITIALSIZE 300 M 没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。 INCREASESIZE 75 M (或百分数) 当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。 MAXSIZE NONE 表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。 当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数: CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE; 在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。 在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。 如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。 代码页和整理次序所有DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESET 和 TERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。 英语等语言包含的独特字符相当少;因此孝梁单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。 在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。 DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。 对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。
D. 数据库索引有哪几种怎样建立索引
种类:
1、按照索引列值的唯一性,索引可分为唯一索引和非唯一索引;
非唯一索引:
create index 索引名 on 表名(列名) tablespace表空间名;
唯一索引:
建立主键或者唯一约束时会自动在对应的列上建立唯一索引;
2、索引列的个数:单列索引和复合索引;
3、按照索引列的物理组织方式。
索引的创建格式:
CREATEUNIUQE|BITMAPINDEX<schema>.<index_name>ON<schema>.<table_name>(<column_name>|<expression>ASC|DESC,<column_name>|<expression>ASC|DESC,...)TABLESPACE<tablespace_name>STORAGE<storage_settings>LOGGING||COMPRESS<nn>NOSORT|REVERSEPARTITION|GLOBALPARTITION<partition_setting>
使用USER_IND_COLUMNS查询某个TABLE中的相应字段索引建立情况
使用DBA_INDEXES/USER_INDEXES查询所有索引的具体设置情况。
在Oracle中的索引可以分为:B树索引、位图索引、反向键索引、基于函数的索引、簇索引、全局索引、局部索引等,下面逐一讲解:
一、B树索引:
最常用的索引,各叶子节点中包括的数据有索引列的值和数据表中对应行的ROWID,简单的说,在B树索引中,是通过在索引中保存排过续的索引列值与相对应记录的ROWID来实现快速查询的目的。其逻辑结构如图:
可以保证无论用户要搜索哪个分支的叶子结点,都需要经过相同的索引层次,即都需要相同的I/O次数。
B树索引的创建示例:
create index ind_t on t1(id);
注1:索引的针对字段创建的,相同字段不能创建一个以上的索引;
注2:默认的索引是不唯一的,但是也可以加上unique,表示该索引的字段上没有重复值(定义unique约束时会自动创建);
注3:创建主键时,默认在主键上创建了B树索引,因此不能再在主键上创建索引。
二、位图索引:
有些字段中使用B树索引的效率仍然不高,例如性别的字段中,只有“男、女”两个值,则即便使用了B树索引,在进行检索时也将返回接近一半的记录。
所以当字段的基数很低时,需要使用位图索引。(“低”的标准是取值数量 < 行数*1%)
反向键索引是一种特殊的B树索引,在存储构造中与B树索引完全相同,但是针对数值时,反向键索引会先反向每个键值的字节,然后对反向后的新数据进行索引。例如输入2008则转换为8002,这样当数值一次增加时,其反向键在大小中的分布仍然是比较平均的。
反向键索引的创建示例:
createindex ind_t on t1(id) reverse;
注:键的反转由系统自行完成。对于用户是透明的。
四、基于函数的索引:
有的时候,需要进行如下查询:select * from t1 where to_char(date,'yyyy')>'2007';
但是即便在date字段上建立了索引,还是不得不进行全表扫描。在这种情况下,可以使用基于函数的索引。其创建语法如下:
create index ind_t on t1(to_char(date,'yyyy'));
注:简单来说,基于函数的索引,就是将查询要用到的表达式作为索引项。
五、全局索引和局部索引:
这个索引貌似很复杂,其实很简单。总得来说一句话,就是无论怎么分区,都是为了方便管理。
具体索引和表的关系有三种:
1、局部分区索引:分区索引和分区表1对1
2、全局分区索引:分区索引和分区表N对N
3、全局非分区索引:非分区索引和分区表1对N
创建示例:
首先创建一个分区表
createtable student
(
stuno number(5),
sname vrvhar2(10),
deptno number(5)
)
partition by hash (deptno)
(
partition part_01 tablespace A1,
partition part_02 tablespace A2
);
创建局部分区索引(1v1):
create index ind_t on student(stuno)
local(
partition part_01 tablespace A2,
partition part_02 tablespace A1
);--local后面可以不加
创建全局分区索引(NvN):
create index ind_t on student(stuno)
globalpartition by range(stuno)
(
partition p1 values less than(1000) tablespace A1,
partition p2 values less than(maxvalue) tablespace A2
);--只可以进行range分区
创建全局非分区索引(1vN)
createindex ind_t on student(stuno) GLOBAL;
E. oracle 数据库 表空间
创建表用户
并指定表空间(test123_TEMP为一个临时表空间名)
create
user
test000
identified
by
test000
default
tablespace
test123
temporary
tablespace
test123_TEMP;
给用户付权限
GRANT
CONNECT,RESOURCE,DBA
TO
ODJUKE;
F. 有关Oracle数据库的备份情况
一 意义 当我们使用一个数据库时 总希望数喊者据库的内容是可靠的 正确的 但由于计算机系统的故障(硬件故障 网络故障 进程故障和系统故障)影响数据库系统的操作 影响数据库中数据的正确性 甚至破坏数据库 使数据库中全部或部分数据丢失 因此当发生上述故障后 希望能重新建立一个完整的数据库 该处理称为数据库恢复 恢复子系统是数据库管理系统的一个重要组成部分 恢复处理随所发生的故障类型所影响的结构而变化 二 备份的方法ORACLE数据库有三种标准的备份 导出/导入(EXPORT/IMPORT) 冷备份 热备份 导出备份是一种逻辑备份 这种方法包括读取一系列的数据库日志 并写入文件中 这些日志的读取与其所处位郑答薯置无关 冷备份和热备份是物理备份(也称低级备份) 它涉及到组成数据库的文件 但不考虑逻辑内容 下面我们分别介绍一下这三种备份方法及其特点 (一) 导出/导入(EXPORT/IMPORT)EXPORT/IMPORT是用来将ORACLE中数据移出/移入数据库 EXPORT将数据库中数据备份成一个二进制系统文件称为 导出转储文件 (EXPORT DUMP FILE) 并将重新生成数据库写入文件中 它有三种模式 a 用户模式 导出用户所有对象以及对象中的数据 b 表模式 导出用户所有表或者指定的表 c 整个数据库 导出数据库中所有对象 它的备份有三种类型 a 完全型(PLETE EXPORT) 备份整个数据库 b 积累型(ULATIVE ERPORT) 备份上一次积累型备份所改变的数据 c 增量型(INCREAMENTAL EXPORT) 备份上一次备份后改变的数据 EXPORT 的命令可以交互式进行 各参数的具体含义见附录 在进行导出备份时我们要考虑一点问题 那就是导出的一致性 在导出过程 中导出每读一次就读取一个表 因而尽管导出是在一个特点时自己开始的 但不同的表读取的时间不同 因此 导出开始读一个表时 此时表中的数据才是导出的数据 这样当大多数表按内部关键字和外部关键字相互联系时 在导出过程中这些相关联表的改变就会导致导出的不一致性 要避开这个 我们可以将导出过程安排在不对表操作的时候进行 另外 当ORACLE中RESTRICTEP CONSISTENT 选项就可以保证导出数据一致性
IMPORT导入 导入的过程是导出的逆过程 这个命令先读取导出来的导出转储二进制文件 并运行文件 恢复对象用户和数据 IMPORT命令执行的方法和EXPORT方案有关 如果EXPORT所实施的是完全型方案(FULL)则在IMPORT时所有的数据对象 包括表空间 数据文件 用户都会在导入时创建 但考虑到数据库中的物理布局 预先创建表空间和用户是有用的 如果EXPORT使用的是INCREMENTAL/CUMULATIVE方式 则需要预先设置好表空间 用户 数据文件 (二) 冷备份冷备份发生在数据库已经正常关闭的情况下 当正常关闭时会提供给我们一个完整的数据库 数据库使用的每个文件都被备份下来 这些文件包括 所有数据文件所有控制文件所有联机REDO LOG 文件INIT ORA文件(可选)值得注意的是冷备份必须是数据库关闭的情况下举岁完成 当数据库开着的时候 执行数据库文件系统备份无效 作冷备份一般步骤是 正常关闭要备份的实例(instance); : 备份整个数据库到一个目录 启动数据库 SQLDBA>connect internalSQLDBA>shutdown normal SQLDBA>! cp <file> <backup directory>或SQLDBA>!tar cvf /dev/rmt/ /dg/oracle SQLDBA>startup
(三)热备份(ACHIRELOG)数据库需要二十四小时运行 而且随时有新的数据加入 数据丢失将影响整个公司 采用archivelog mode物理备份 ?设置数据库为automatic archivelog mode #su oracle%svrmgrl svrmgrl>connect internalsvrmgrl>startup mount svrmgrl>alter database archivelogsvrmgrl>shutdownsvrmgrl>exit%vi initoracle ora加入log_archive_start = true # if you want automatic archivinglog_archive_dest = $ORACLE_HOME/dbs/archlog_archive_format = log%s arc%dbstart%ps ef|grep archoracle : : ? : ora_arch_oracle 注 oracle database is in automatic archivelog mode
?full offline entire database backup 当数据库初始完成后 这份备份是将来备份的基础 它提供了所有与数据库有关的拷贝 %dbshut%cp /oracle/oradata/oracle /system dbf /oracle/oradata/oracle /rbs dbf /oracle/oradata/oracle /temp dbf/oracle/oradata/oracle /tools dbf/oracle/oradata/oracle /users dbf/oraclecle/app/oracle/proct/ /dbs/application dbf/oracle/app/oracle/proct/ /dbs/apptmpsp dbf/oracle/app/oracle/proct/ /dbs/apprlbksp dbf/oracle/oradata/oracle /redooracle log /oracle/oradata/oracle /control ctl /oracle/oradata/oracle /control ctl /oracle/oradata/oracle /control ctl <backup directory>%dbstart 注:以上* dbf文件为数据文件 * log文件为日志文件 * ctl文件为控制文件%exit %tar uvf /dev/rmt/ <backup files> 注:如果为oracle 则 相应的 data files relog files control files
每天做一次 partial online with archiving backups #su oracle%svrmgrl%svrmgrl>connect internal%svrmgrl>alter tablespace billsp begin backup%svrmgrl>alter tablespace billtmpsp begin backup%svrmgrl>alter tablespace billrlbksp begin backup%svrmgrl>alter tablespace system begin backup %svrmgrl>alter tablespace rbs begin backup%svrmgrl>alter tablespace temp begin backup%svrmgrl>alter tablespace tools begin backup %svrmgrl>alter tablespace users begin backup %svrmgrl>host cp all datafile to the backup storage #文件名如第一步中以 dbf结尾的 %svrmgrl>alter tablespace billsp end backup%svrmgrl>alter tablespace billtmpsp end backup%svrmgrl>alter tablespace billrlbksp end backup%svrmgrl>alter tablespace system end backup %svrmgrl>alter tablespace rbs end backup%svrmgrl>alter tablespace temp end backup%svrmgrl>alter tablespace tools end backup %svrmgrl>alter tablespace users end backup
做一个sql文件 如上所写
The billing system can recover to the point of failure when the failure occur
七 备份文件的恢复 恢复文件 以下是对"/etc/passwd"文件的恢复( 放入正确的磁带( 运行以下命令恢复"/etc/passwd"文件# rsh mt f /dev/rmt/ rew( 找到最近的磁带 向前进带到最近的"/etc/passwd" 比如要找星期三的"/etc/passwd"文件 运行如下命令)#rsh mt f /dev/rmt/ n fsf # ufsrestore if :/dev/rmt/ nufsrestore > ls. etc/ufsrestore > cd etc ufsrestore > ls./etc passwfsrestore > add passwdWarnign ./etc File existsufsrestore > verboseverbose mode onufsrestore > extractExtract requested filesYou have not read any volumes yet .Unless you know which volume your file(s) are on you should start witch the last volume and work to wards the first.Specify next volume # extract file ./etc/passwdAdd linksSet directory mode ower and times.set owner /mode for . ?(yn)nDirectories already exit set mode anyway?(yn)yufsrestore >quit 热备份可以在数据库打开打情况下进行 一般通过使用Alter命令改变表空间的状态来开始进行备份的 备份完成后 要恢其原来状态 否则redo log 会错配 引起数据库下次启动时对受影响的表空间进行完全覆盖 热备份的要求是 热备份工作必需要求数据库在Archivelog 方式下操作 在SQLDBA状态下用alter database archivelog|noarchivelog命令可改变备份的模式 热备份只能在数据库不使用或使用率低的情况下进行 热备份需要大量的档案空间 一般情况 Oracle 以循环的方式写入Online redo log 文件 当填满第一个redo log文件后写第二个 直至最后一个 最后一个被填满后 后台进程LGWR就覆盖第一个 在Archivelog方式下 后台进程ARCH在每一个redo log 文件被覆盖前 给它作一个拷贝 一般 这些文档的redo log 文件被写入磁盘或磁带中 如果磁盘空间够用 建议使用磁盘 这样可大大减少完成备份所需的时间 在作热备份之前 要将config ora文件中的log_archive_start 设为true 将log_archive_dest规定archive redo log 文件的位置 log_archive_dest=/dg/oracle/arch/archlog_archive_start=true一旦数据库运行在archivelog状态下 就可以作备份了 热备份的命令文件由三部分组成 数据文件一个表空间一个空间地备份 a 设置表空间为备份状态 b 备份表空间的数据文件 c 恢复表空间为正常状态 备份归档要作log 文件 a 临时停止归档进程b log下那些在archive redo log目标目录中的文件c 重新启动archive进程d 备份归档的redo log 文件 用alter database backup controlfile命令来备份拷贝文件在热备份运行之前log_archive_dest目录可能已满 这时就要备份目录 然后删除文件 释放空间 这个过程有如下步骤 暂时停止archive进程 记录在log_archive_dest目录下的文件 重新启动archive 进程 备份archive redo log 文件 删除目录中的文件 sqldba lmode=y <<EOF arch archive log stop;exitEOF arch FILES= ls /dg/oracle/arch/arch* dbf ;sqldba lmode=y<<EOF arch connect internalarchive log start;exitEOF arch tar rvf /dev/rmt/ FILESrm f $FILES
逻辑备份与物理备份的结合 前面介绍了三种备份的方法 在数据库做备份时 应该将数据这三种备份的特点灵活运用 我们首先比较一下三种方法的特性
方 法类 型恢 复 特 性EXPORT导出逻辑型可以将任何数据库对象恢复到它被导出时的状态乻hutdown?将最近es of datafile 拷贝到$oracle_home/dbs目录 ?%svrmgrl?svrmgrl>connect internal…svrmgrl>startup mount pfile=filename exclusive?svrmgrl>alter database recover;注:将自动恢复数据到the point of failure;? svrmgrl>alter database open; ?当archive log文件过多时 在 做过部分备份后 可将current log sequence 之前的log*** arc删除 #su oracle%svrmgrlsvrmgrl>connect internal;svrmgrl>archive log list; #此处标有current log sequence 假设为 Svrmgrl>exit$cd /billdg/oracle/app/oracle/proct/ /dbs/arch$ rm #将log arc之前的文件如log arc log arc 删除 冷 备 份物理型可将数据库到它被关闭的状态热 备 份物理型可将数据库恢复到任一时间点的状态
当数据库比较小时 处理业务也小时 冷备份导出就可以了 如果只对一两个表备份导出就够了 一般来说一个好 备份最终执行总包括逻辑和物理 导出确认数据库在逻辑的正确性而物理备份确保物理 另外 在进行备份时需要一些存储介质 对于这些介质应该对其作好管理 根据备份的内容 日期将介质统一编号 以免备份和恢复时弄错介质 造成原有的备份丢失 介质应存放在与计算机设备不同的地点 以免机房发生意外时 备份与计算机设备一同损坏
附录 tar命令tar option [arguments] filename option:c:创建一个由命令行指定的新的tarfilet:列出tarfile中的内容x:打开tarfile;f:使用其后的filename 或/dev/rmt/ | v:列出被恢复的文件名 p:恢复文件example:#tar cvf /dev/rmt/ /oracle备份/root 下的所有内容#tar tvf /dev/rmt/ 列出磁带上的所有内容#tar xvf /dev/rmt/ /oracle将磁带上的/oracle目录中的内容恢复到当前目录中
导出选项关键字 内 容 USERID 运行导出命令的帐号的用户名/口令 BUFFEER 用来取数据行的缓冲区的大小 FILE 导出转储文件的名字PRESS 导出是否应该压缩有碎片的段成一个范围 这将会影响STORAGE 子句 GRANTS 导出时否要导出数据库对象上的授权INDEXES 是否要导出表上的索引ROWS 是否应导出行 如它为 N 那么在导出文件中仅生成数据库 对象的DDLCONSSTRAINTS 是否导出表旧的约定条件FULL 如设为 Y 那么将执行一个整个数据库导出操作OWNER 要导出的一系列数据库帐号 然后执行这些帐号的USER导出操 作TABLES 要导出的一系列表 执行这些表的TABLE导出操作RECORDLENGTH 转储导出文件日志的长度(以字节为单位) 通常都使用缺省 除非要在两个不同操作系统中传递导出文件INCTYPE 正在执行的导出操作的类型(有效值有 PLETE (缺省值) CUMULATIVE 和 IVCREMENTAL )RECORD 在增量导出类型中的一个标记 标明是否将日志存储到数据字典中日志导出的表中PARFILE 要传递给导出的参数文件的名字 这个文件将包含所有参数的入口项ANALYZE 标明是否将移对象的统计信息写入导出转储文件中CONSISTENT 标明是否保留所有导出对象的读取一致复制 LOG 导出日志将要写入的文件的名字MLS 标明是否要导出MLS 标号MLS_LABEL_ 规定了MLS标号的格式
导入选择项USERID 运行导入命令的帐号的用户名/口令 BUFFEER 用来取数据行的缓冲区的大小 FILE 导入转储文件的名字SHOW 规定文件内容是否被显示 而不是被执行 EGORE 标明在执行 CREATE 命令时 是否忽略遇到的错误 如果正在导入的对象已经存在时 应使用这个参数 FULL 如设为 Y 那么将执行一个整个数据库导入操作FROMUSER 在FULL=N的情况下 才有参数 它是一系列的数据库帐号 其对象应从导出转储文件中读取 TOUSER 一系列数据库帐号 导出转储文件扣的对象将要导入这些帐号 GRANTS 导入时否要导入数据库对象上的授权INDEXES 是否要导入表上的索引ROWS 是否应导入行 如它为 N 那么在导入文件中执行数据库对象的DDLFULL 如设为 Y 那么将执行一个整个数据库导出操作TABLES 要导入的一系列表RECORDLENGTH 转储导入文件日志的长度(以字节为单位) 通常都使用缺省 除非要在两个不同操作系统中传递导入文件INCTYPE 正在执行的导入操作的类型(有效值有 PLETE (缺省值) CUMULATIVE 和 IVCREMENTAL )PARFILE 要传递给导入的参数文件的名字 这个文件将包含所有参数的入口项ANALYZE 标明是否将移对象的统计信息写入导入转储文件中LOG 导入日志将要写入的文件的名字MLS 标明是否要导入MLS 标号
热备份的命令文件 ORACLE_SID=oracle ORACLE_HOME=/dg/oraclesqldba lmode=y<<EOF arch connect internalalter tablespace SYSTEM begin backup;!tar cvf /dev/rmt/ /dg/oracle/dbms/sys dbfalter tablespace SYSTEM end backup;
alter tablespace BWT begin backup;!tar cvf /dev/rmt/ /dg/oracle/dbms/BWT dbfalter tablespace BWT end backup;
archive log stopexitEOF arch FILES= ls /dg/oracle/arch/arch* dbf ;
sqldba lmode=y<<EOF arch connect internalarchive log start;exitEOF arch
tar rvf /dev/rmt/ $FILESrm f $files
sqldba lmode=y<<EOFarch alter database backup controlfile to /dg/oracle/dbms/bwtcontrfile backup ;exitEOF arch
lishixin/Article/program/Oracle/201311/17668
G. 在Oracle数据库中按用户名重建索引的方法
如果你管理的Oracle数据库下某些应用项目有大量的修改删除操作 数据索引是需要周期性烂派的重建的
它不仅可以提高查询性能 还能增加索引表空间空闲空间大小
在ORACLE里大量删除记录后 表和索引里占用的数据块空间并没有释放
重建索引可以释放已删除记录索引占用的数据块空间
转移数据 重命名的方法可以重新组织表里的数据
下面是可以按ORACLE用户名生成重建索引的SQL脚本
SET ECHO OFF; SET FEEDBACK OFF; SET VERIFY OFF; SET PAGESIZE ; SET TERMOUT ON; SET HEADING OFF; ACCEPT username CHAR PROMPT Enter the index username: ; spool /oracle/rebuild_&username sql; SELECT REM + + || chr( ) || REM | INDEX NAME : || owner || || segment_name || lpad( | (length(owner) + length(segment_name)) ) || chr( ) || REM | BYTES : || bytes || lpad ( | (length(bytes)) ) || chr( ) || REM | EXTENTS : || extents || lpad ( | (length(extents)) ) || chr( ) || REM + + || chr( ) || ALTER INDEX || owner || || segment_name || chr( ) || REBUILD || chr( ) || TABLESPACE || tablespace_name || chr( ) || STORAGE ( || chr( ) || INITIAL || initial_extent || chr( ) || NEXT || next_extent || chr( ) || MINEXTENTS || min_extents || chr( ) || MAXEXTENTS || max_extents || chr( ) || PCTINCREASE || pct_increase || chr( ) || ); || chr( ) || chr( ) FROM dba_segments WHERE segment_type = INDEX AND owner= &username ORDER BY owner bytes DESC; spool off;
如果你用的是WINDOWS系统 想改变输出文件的存放目录 修改spool后面的路径成
spool c oraclerebuild_&username sql
如果你只想对大于max_bytes的索引重建索闷档引 可以修改上面的SQL语句
在AND owner= &username 后面加个限制条件 AND bytes> &max_bytes
如果你想修改索引的存储参数 在重建索引rebuild_&username sql里改也可以
比如把pctincrease不等于零的值改成是零
生成的rebuild_&username sql文件我们需要来分析一下饥罩贺 它们是否到了需要重建的程度
分析索引 看是否碎片严重 SQL>ANALYZE INDEX &index_name VALIDATE STRUCTURE; col name heading Index Name format a col del_lf_rows heading Deleted|Leaf Rows format col lf_rows_used heading Used|Leaf Rows format col ratio heading % Deleted|Leaf Rows format SELECT name del_lf_rows lf_rows del_lf_rows lf_rows_used to_char(del_lf_rows / (lf_rows)* ) ratio FROM index_stats where name = upper( &index_name );
当删除的比率大于 % 时 肯定是需要索引重建的
经过删改后的rebuild_&username sql文件我们可以放到ORACLE的定时作业里
比如一个月或者两个月在非繁忙时间运行
如果遇到ORA 错误 表示索引在的表上有锁信息 不能重建索引
那就忽略这个错误 看下次是否成功
对那些特别忙的表要区别对待 不能用这里介绍的方法
lishixin/Article/program/Oracle/201311/19038
H. Oracle数据库中为新创建的表分配的初始空间通常为多大
每个表都有自己的存储参数,如果建表时不指定就使用当前表空间的,建表空间时候不指定,一般默认是
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
)
即新建表分配64k,每次扩展1M。
I. Oracle 10i数据库创建过程
Oracle i数据库安装结束后 可以使用dbca来创建数据库 下面是具体的创建过程 我会重点提示和 i不同的地方 启动dbca 选择create a database 选择new database 提示输入Global Database Name和SID 和 i不同的是在同一个界面会提示输入sys和system的密码 而 i如果我没机错的话应该是在建库结束的时候才输入的 如下图 数据库存储选项中 有了三个选择 在 i中是没有选择的 现在我们可以选择是我们的数据文件具体是放在什么地方 文件系统 ASM或裸设备上 在 i中我们只能在后面的数滑世据文件存储位置里自己定义数据文件是位于文件系统还是位于裸设备上 特别值得关注的是ASM 这是Oracle i的一个新特性 在随后的文章里我将向大家详细介绍ASM 如下图 和 i一样提示选择Database Components和Custom Scripts 如果你用不上这些 建议不要选 和 i相同 选择服务器运行模式 我选择Dedicated Server Mode 在设定初始参数时 有以下几个变化 其中Character Sets中多了两个选项 Default language to be used for the database: (可以选simplified chinese)和 Default date format to be used for the database: (可以选择china) 这两个选项对应的是两个初始化参数 nls_language和nls_territory 这两个参数 i中就有了 但是这里有个问题 就是如果你在第一选项中选择了 simplified chinese 建库的时候会报错 原因在于使用dbca生成初始化参数时nls_language的值没有双引号 对于AMERICAN来说是没有问题 但因为SIMPLIFIED CHINESE是两个单词没有了双引号Oracle就不认识了 正确形式如下 nls_language = SIMPLIFIED CHINESE nls_territory=CHINA File Locations中spfile的默认位置改成了数据文件的存放位置 这样存放备份方便就会方便很多 不像以前需要备份不同目录中的文件 多了一个OMF 在此我们可以定义Oracle Managed File的位置 如下图 和 i相同 设置Database Storage 但这里有了些细节上的变化 其中SYSTEM表空间的默认大小由之前的 M变成了 M 呵呵 系统越来越大^_^ 另外一个就是在 i不同的数据库组件放在不同的表空间上 所以默认情况下会一次性多出好几个表空间出来 在这里全部放在SYSAUX表空间中了 变化最大要算是Redo log的默认大小了 i默认就是 M 而在 i里的默认值是 M 可以看森让隐出Oracle同样在不断调整 至此厅此就开始建库了 从建库的界面上可以看到添加很多内容 JAVA XML等 建库结束后启动SQLPLUS 可以看到下面的信息 tiger> sqlplus /as sysdba SQL*Plus: Release Beta on Mon Jun : : Copyright (c) Oracle Corporation All rights reserved Connected to:Oracle i Enterprise Edition Release bit BetaWith the Partitioning and Oracle Data Mining optionsSQL> select * from v$version;BANNER Oracle i Enterprise Edition Release bit BetaPL/SQL Release BetaCORE BetaTNS for HPUX: Version BetaNLSRTL Version Beta好了 一个Oracle i的数据库到此就建好了 lishixin/Article/program/Oracle/201311/16812
J. Oracle数据库数据对象分析
Oracle数据库数据对象中最基本的野弊穗是表和视图 其他还有约束 序列 函数 存储过程 包 触发器等 对数据库的操作可以基本归结为对数据对象的操作 理解和掌握Oracle数据库对象是学习Oracle的捷径 表和视图Oracle中表是数据存储的基本结构 ORACLE 引入了分区表和对象表 ORACLE i引入了临时表 使表的功能更强大 视图是一个或多个表中数据的逻辑表达式 本文我们将讨论怎样创建和管理简单的表和视图 管理表表可以看作有行和列的电子数据表 表是关系数据库中一种拥有数据的结构 用CREATE TABLE语句建立表 在建立表的同时 必须定义表名 列 以及列的数据类型和大小 例如 CREATE TABLE procts( PROD_ID NUMBER( ) PROD_NAME VAECHAR ( ) STOCK_QTY NUMBER( )); 这样我们就建立了一个名为procts的表 关键词CREATE TABLE后紧跟的表名 然后定义了三列 同时规定了列的数据类型和大小 在创建表的同时你可以规定表的完整性约束 也可以规定列的完整性约束 在列上普通的约束是NOT NULL 关于约束的讨论我们在以后进行 在建立或更改表时 可以给表一个缺省值 缺省值是在增加行时 增加的数据行中某一项值为null时 oracle即认为该值为缺省值 下列数据字典视图提供表和表的列的信息 DBA_TABLES DBA_ALL_TABLES USER_TABLES USER_ALL_TABLES ALL_TABLES ALL_ALL_TABLES DBA_TAB_COLUMNS USER_TAB_COLUMNS ALL_TAB_COLUMNS表的命名规则表名标识一个表 所以应尽可能在表名颂卜中描述表 oracle中表名或列名最长可以达 个字符串 表名应该以字母开始 可以在表名中包含数字 下划线 # $等 从其它表中建立表可以使用查询从基于一个或多个表中建立表 表的列的数据类型和大小有查询结果决定 建立这种形式的表的查询可以选择其他表中所有的列或者只选择部分列 在CREATE TABLE语句中使用关键字AS 例如:SQL>CREATE TABLE emp AS SELECT * FROM employeeTABLE CREATEDSQL> CREATE TABLE Y AS SELECT * FROM X WHERE no= 需要注意的是如果查询涉及LONG数据类型 那么CREATE TABLE AS SELECT 将不会工作 更改表定义在建立表后 有时候我们可能需要修改表 比如更改列的定义 更改缺省值 增加新列 删除列等等 ORACLE使用ALTER TABLE语句来更改表的定义 增加列语法 ALTER TABLE [schema ] table_name ADD column_definition 例 ALTER TABLE orders ADD order_date DATE;TABLE ALTER 对于已经存在的数据行 新列的值将是NULL 更改列语法 ALTER TABLE [schema ] table_name MODIFY column_name new_attributes; 例 ALTER TABLE orders MODITY (quantity number( ) status varchar ( )); 这个例子中我们修改了表orders 将STATUS列的长度增加到 将QUANTITY列减小到 ;修改列的规则如下 可以增加字符串数据类型的列的长度 数字数据类型列的精度 减少列的长度时 该列应该不包含任何值 所有数据行都为NULL 改变数据类型时 该列的值必须是NULL 对于十进制数字 可以增加或减少但不能降低他的卜裂精度 删除数据列优化ORACLE数据库 唯一的方法是删除列 重新建立数据库 在ORACLE i中有很多方法删除列 你可以删除未用数据列或者可以标示该列为未用数据列然后删除 删除数据列的语法是 ALTER TABLE [schema ] table_name DROP {COLUM column_names | (column_names)}[CASCADE CONSTRAINS] 要注意的是在删除列时关于该列的索引和完整性约束也同时删除 注意关键字CASCADE CONSTRAINS 如果删除的列是多列约束的一部分 那么这个约束条件相对于其他列也同时删除 如果用户担心在大型数据库中删除列要花太多时间 可以先将他们标记为未用数据列 标记未用数据列的语法如下 ALTER TABLE [schema ] table_name SET UNUSED {COLUM column_names | (column_names)}[CASCADE CONSTRAINS] 这个语句将一个或多个数据列标记为未用数据列 但并不删除数据列中的数据 也不释放占用的磁盘空间 但是 未用数据列在视图和数据字典中并不显示 并且该数据列的名称将被删除 新的数据列可以使用这个名称 基于该数据列的索引 约束 统计等都将被删除 删除未用数据列的语句是 ALTER TABLE [schema ] table_name DROP {UNUSED COLUM | COLUMN CONTINUE} 删除表和更改表名删除表非常简单 但它是一个不可逆转的行为 语法 DROP TABLE [schema ] table_name [CASCADE CONSTRAINTS] 删除表后 表上的索引 触发器 权限 完整性约束也同时删除 ORACLE不能删除视图 或其他程序单元 但oracle将标示他们无效 如果删除的表涉及引用主键或唯一关键字的完整性约束时 那么DROP TABLE语句就必须包含CASCADE CONSTRAINTS子串 更改表名RENAME命令用于给表和其他数据库对象改名 ORACLE系统自动将基于旧表的完整性约束 索引 权限转移到新表中 ORACLE同时使所有基于旧表的数据库对象 比如视图 程序 函数等 为不合法 语法 RENAME old_name TO new_name; 例 SQL> RENAME orders TO purchase_orders;TABLE RENAMED截短表TRUNCATE命令与DROP命令相似 但他不是删除整个数据表 所以索引 完整性约束 触发器 权限等都不会被删除 缺省情况下将释放部分表和视图空间 如果用户不希望释放表空间 TRUNCATE语句中要包含REUSE STORAGE子串 TRUNCATE命令语法如下 TRUNCATE {TABLE|CLUSTER} [schema ] name {DROP|REUSE STORAGE} 例 SQL> TRUNCATE TABLE t ;TABLE truncate 管理视图视图是一个或多个表中的数据的简化描述 用户可以将视图看成一个存储查询(stored query)或一个虚拟表(virtual table) 查询仅仅存储在oracle数据字典中 实际的数据没有存放在任何其它地方 所以建立视图不用消耗其他的空间 视图也可以隐藏复杂查询 比如多表查询 但用户只能看见视图 视图可以有与他所基于表的列名不同的列名 用户可以建立限制其他用户访问的视图 建立视图CREATE VIEW命令创建视图 定义视图的查询可以建立在一个或多个表 或其他视图上 查询不能有FOR UPDATE子串 在早期的ORACLE i版本中不支持ORDER BY子串 现在的版本中CREATE VIEW可以拥有ORDER BY子串 例 SQL> CREATE VIEW TOP_EMP AS SELECT empno EMPLOYEE_ID ename EMPLOYEE_NAME salary FROM empWHERE salary > 用户可以在创建视图的同时更改列名 方法是在视图名后立即加上要命名的列名 重新定义视图需要包含OR REPLACE子串 SQL> CREATE VIEW TOP_EMP(EMPLOYEE_ID EMPLOYEE_NAME SALARY) AS SELECT empno ename salary FROM empWHERE salary > 如果在创建的视图包含错误在正常情况下 视图将不会被创建 但如果你需要创建一个带错误的视图必须在CREATE VIEW语句中带上FORCE选项 如 CREATE FORCE VIEW ORDER_STATUS AS SELECT * FROM PURCHASE_ORDERSWHERE STATUS= APPPOVE ;SQL>/warning :View create with pilation errors 这样将创建了一个名为ORDER_STATUS的视图 但这样的视图的状态是不合法的 如果以后状态发生变化则可以重新编译 其状态也变成合法的 从视图中获得数据从视图中获得数据与从表中获得数据基本一样 用户可以在连接和子查询中使用视图 也可以使用SQL函数 以及所有SELECT语句的字串 插入 更新 删除数据用户在一定的限制条件下可以通过视图更新 插入 删除数据 如果视图连接多个表 那么在一个时间里只能更新一个表 所有的能被更新的列可以在数据字典USER_UPDATETABLE_COLUMNS中查到 用户在CREATE VIEW中可以使用了WITH子串 WITH READ ONLY子串表示创建的视图是一个只读视图 不能进行更新 插入 删除操作 WITH CHECK OPTION表示可以进行插入和更新操作 但应该满足WHERE子串的条件 这个条件就是创建视图WHERE子句的条件 比如在上面的例子中用户创建了一个视图TOP_EMP 在这个视图中用户不能插入salary小于 的数据行 删除视图删除视图使用DROP VIEW命令 同时将视图定义从数据字典中删除 基于视图的权限也同时被删除 其他涉及到该视图的函数 视图 程序等都将被视为非法 例 DROP VIEW TOP_EMP; 完整性约束 完整性约束用于增强数据的完整性 Oracle提供了 种完整性约束 Check NOT NULL Unique Primary Foreign key完整性约束是一种规则 不占用任何数据库空间 完整性约束存在数据字典中 在执行SQL或PL/SQL期间使用 用户可以指明约束是启用的还是禁用的 当约束启用时 他增强了数据的完整性 否则 则反之 但约束始终存在于数据字典中 禁用约束 使用ALTER语句ALTER TABLE table_name DISABLE CONSTRAINT constraint_name; 或ALTER TABLE policies DISABLE CONSTRAINT c_gender lishixin/Article/program/Oracle/201311/18217