Directorio de artículos
1. Información general
Dibuje el modelo de almacenamiento de Oracle en forma de diagrama entidad-relación, con la estructura lógica a la izquierda y la estructura física a la derecha.
- Hay una relación dibujada con una línea de puntos, que indica una relación de varios a varios entre el segmento y el archivo de datos. La línea discontinua se usa para indicar la relación porque la relación no debería existir. Un buen ingeniero de relaciones no debe permitir relaciones de muchos a muchos.
- La entidad de espacio de tabla elimina la relación de varios a varios entre el segmento y el archivo de datos. Un espacio de tabla puede contener varios segmentos y puede estar compuesto por varios archivos de datos.
insinuación:
Creando
table
yindex
cuando debemos traer属主(对应用户的表空间)
2 gramática
2.1 Crear
- El creador del espacio de tabla debe tener
create tablespace
privilegios del sistema - Al crear un espacio de tabla, hay muchas cláusulas predeterminadas / opcionales, siempre que conozcamos las cláusulas más utilizadas.
- Para obtener uno muy completo, consulte: Oracle 12.2 Official Document-create tablespace
Sintaxis común: donde [] significa que el parámetro es opcional
create [temporary | undo] tablespace "tbs"
datafile 'D:\oracle\tbs_01.dbf'
size 100m
[loggin | nologgin] -- 默认 loggin
[autoextend off] | [autoextend on next n1 maxsize m] -- 自动扩展, 默认 off, n1 默认 , m 默认 unlimited <= size n
[extent management local [uniform size n]] -- 默认 local, n = 64K;
[segment space management auto] -- 默认 auto, 且不建议被修改
-- 创建新用户,使用该表空间,方便测试
create user ODSDATA identified by 12345 default tablespace tbs
temporary tablespace temp quota unlimited on odstbs;
grant create session to ODSDATA;
grant resource to ODSDATA;
Análisis de sintaxis:
1. create tablespace tbs 创建一个名为 "tbs" 的表空间(最常用)
(1) temporary: 临时表空间,用于临时数据的存放
(2) undo: 撤销表空间,用于重做日志文件的存放
2. datafile 'D:\oracle\tbs_01.dbf' size 5m 指定数据文件的位置和大小
(1) 数据文件位置: "D:\oracle\tbs_01.dbf" -- 推荐使用绝对路径
(2) 数据文件大小: 5m
(3) 如果有多个文件,可以用逗号 , 隔开. 但是每个每个文件都要指明大小
3. loggin | nologgin 默认是 loggin,一般不写,但你要知道
(1) loggin: 创建表空间时,同时生成重做日志文件(数据丢失时,可以恢复)
(2) nologgin: 与 loggin 相反,但表创建速度快
4. autoextend 表空间是否自动扩展
(1) off: 不自动扩展,默认值
(2) autoextend on next 10m maxsize 100m
自动扩展,增量是 10m,最大大小是 100m
5. extent management local | dictionary 区管理
(1) local 本地管理,强烈推荐,从 Oracle 9i 开始,只能用 local,效率高
(2) dictionary 数据字典管理,以前的管理方式。
将数据文件中的每一个存储单元做为一条记录,在大量数据管理时,会产生大量的 insert、update 操作,严重影响性能。
同时,长时间对表数据的操作,会产生很多磁盘碎片,这就是为什么要做磁盘整理的原因。
6. uniform size n: 指定 extent 的固定大小
(1) size 8m: 固定为 8m
(2) 若不填,extent 默认 64k (参考: dba_tablespaces 中的 initial_extent)
7. segment space management auto | manual
(1) auto: 段空间由系统自动管理,只能使用在本地管理的表空间中(lob 字段的表除外)
(2) manual: 段空间手动管理,目前已不用,主要是为了向后兼容
Después de haberlo creado, también podemos consultar los parámetros establecidos anteriormente a través del diccionario de datos:
SELECT ddf.file_id,
ddf.file_name, -- 数据文件名称 datefile 'fileName'
dt.tablespace_name, -- 表空间名称 tablespace tbs
ddf.bytes / 1024 / 1024 || 'm' size_n, -- 初始数据文件大小,也就是 size n
dt.logging, -- 日志属性 loggin
ddf.autoextensible, -- 自动扩展
dt.extent_management, -- extent management local | dictionary
dt.allocation_type, -- system 长度自适应 | uniform 长度固定
dt.segment_space_management, -- segment space management auto | manual
dt.next_extent / 1024 / 1024 || 'm' next_n -- 数据文件增量大小,也就是 next n (当 allocata_type = 'uniform' 时,才有值)
FROM dba_tablespaces dt, -- tablespace_name
dba_data_files ddf -- file_name, file_id, tablespace_name
WHERE ddf.tablespace_name = dt.tablespace_name
AND dt.tablespace_name IN ('');
2.2 Modificación
- No se permite modificar el espacio de tabla integrado del sistema, como por ejemplo:
system、sysaux、temp、undo、users
- El archivo de datos, la ubicación y el tamaño correspondientes no han cambiado después de modificar el nombre del espacio de tablas
- Un espacio de tabla que está fuera de línea no puede modificar su nombre
1. 调整数据文件的大小
alter database datafile 'D:\oracle\tbs01_1.dbf' resize 10m;
2. 调整数据文件为自动扩展
alter database datafile 'D:\oracle\tbs01_1.dbf' autoextend on next 20m maxsize 1g; -- 增量 20m, 最大长度 1g
3. 新增数据文件
alter database datafile 'D:\oracle\tbs02_1.dbf' size 2000m; -- 不自动扩展
alter database datafile 'D:\oracle\tbs02_1.dbf' autoextend on next 20m maxsize 1g; -- 自动扩展
2.3 Eliminar
- Se puede eliminar cualquier espacio de tabla de la base de datos Oracle (excepto
system、sysaux、temp、undo、users
) - Una vez que se elimina el espacio de tabla, no se puede restaurar, por lo que es mejor hacer una copia de seguridad antes de eliminar el espacio de tabla
- No puede eliminar un espacio de tabla que contenga segmentos activos, y debe hacer que el espacio de tabla esté fuera de línea antes de ser eliminado (muy simple, no se desconecte ni cierre el PL / SQL en ejecución, eliminar el espacio de tabla informará un error)
- El usuario para eliminar el espacio de tabla debe tener
drop tablespace
permiso
1. 删除空的表空间(数据文件还在)
drop tablespace tbs;
2. 删除表空间 和 数据文件
drop tablespace tbs including contents and datafiles;
3. 仅从数据字典中删除表空间信息,但数据文件仍然存在,但已经失去作用
drop tablespace tbs including contents;
2.4 Consulta
Consultar información sobre el espacio de la tabla: (si hay varios archivos de datos, se requiere la suma de grupos)
SELECT ddf.file_id 文件id,
ddf.file_name 文件名,
dt.tablespace_name 表空间名,
dfs.block_id 块id,
dt.contents 表空间类型,
dt.extent_management 表空间管理模式,
dt.segment_space_management 块空间管理模式,
dt.allocation_type 分配类型, -- "system 系统随机" or "uniform 固定"
dt.logging 日志模式,
dt.force_logging 是否强制日志, -- 优先级 > 日志模式
ddf.autoextensible 是否自动扩展,
ddf.bytes / 1024 / 1024 "表空间初始大小(M)", -- 单位由 字节 -> MB
ddf.maxbytes / 1024 / 1024 "表空间最大扩展到多少(M)", -- 0 表示自动扩展: off
ddf.bytes / 1024 / 1024 "总大小(M)",
dfs.bytes / 1024 / 1024 "剩余大小(M)",
(1 - dfs.bytes / ddf.bytes) * 100 "使用率%"
FROM dba_tablespaces dt, -- tablespace_name
dba_data_files ddf, -- file_name, file_id, tablespace_name
dba_free_space dfs -- tablespace_name, file_id, block_id
WHERE ddf.tablespace_name = dt.tablespace_name
AND dfs.tablespace_name = ddf.tablespace_name
AND dfs.file_id = ddf.file_id
AND ddf.tablespace_name IN ('表空间名');
3 ejemplo
3.1 Crear un espacio de tabla de extensión automática
Cree un archivo de base de datos de 100M student.dbf espacio de tabla permanente tbs_student, expanda automáticamente cada 10M, el máximo es 500M
CREATE TABLESPACE tbs_student
DATAFILE 'D:\table_space\student.dbf'
SIZE 100m
AUTOEXTEND ON NEXT 10M MAXSIZE 500M -- 自动扩展, 每次扩展 10M, 最大扩展到 500M
PERMANENT -- 永久表空间,默认
EXTENT MANAGEMENT LOCAL;
Consulte el espacio de tabla a través del diccionario de datos:
SELECT dt.tablespace_name 表空间名,
dt.contents 表空间类型,
dt.extent_management 表空间管理模式, -- "LOCAL 默认,本地" or "DICTIONARY 数据字典"
dt.segment_space_management 段空间管理模式, -- "AUTO 默认,自动管理" or "MANUAL 手动管理"
dt.logging 默认日志属性, -- "LOGGING 默认" OR "NOLOGGING"
dt.allocation_type 分配类型, -- "SYSTEM 系统自动分配" or "UNIFORM 统一分配"
dt.next_extent 默认增量, -- next, 当 allocation_type = UNIFORM 时,才有值
ddf.file_id 文件id,
ddf.file_name 文件名,
ddf.autoextensible 是否自动扩展,
ddf.bytes / 1024 / 1024 "表空间初始大小 M", --,单位
ddf.maxbytes / 1024 / 1024 "表空间最大扩展到多少 M"
FROM dba_tablespaces dt, -- tablespace_name
dba_data_files ddf -- file_id
WHERE ddf.tablespace_name = dt.tablespace_name
AND ddf.tablespace_name = 'TBS_STUDENT';
resultado de búsqueda:
3.2 La tabla no se puede expandir en el espacio de la tabla
la razón:
- ¡El espacio de la mesa está lleno!
- La expansión automática del espacio de tabla no está configurada
- O establezca la expansión automática del espacio de tabla, pero excedió
MAXSIZE
Prueba de preparación del usuario
-- 表空间创建语句
CREATE TABLESPACE "TESTTBS_02" DATAFILE
'D:\TABLE_SPACE\TESTTBS_02.DBF' SIZE 1m
AUTOEXTEND ON NEXT 1m MAXSIZE 2m
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
-- 测试用户
CREATE USER test_tablespace IDENTIFIED BY 12345 DEFAULT TABLESPACE TESTTBS_02;
GRANT CREATE SESSION TO test_tablespace; -- 允许登录
GRANT RESOURCE TO test_tablespace; -- 不对用户表空间进行限制
Declaración de prueba:
CREATE TABLE test_tablespace.stu_info (
ID NUMBER(10),
NAME VARCHAR2(30)
);
DECLARE
v_sql_insert VARCHAR2(500);
BEGIN
-- 模拟插入语句
v_sql_insert := 'INSERT INTO test_tablespace.stu_info (id, NAME) VALUES (:b1, :b2)';
FOR i IN 1 .. 100000 LOOP
EXECUTE IMMEDIATE v_sql_insert
USING i, 'a' || i;
END LOOP;
END;
Captura de pantalla de error:
4 extensión
Oración de referencia:
1. 修改表空间名
ALTER TABLESPACE old_name RENAME TO new_name;
2. 设置数据库的默认表空间
ALTER DATABASE DEFAULT TABLESPACE mytbs;
3. 设置数据库的默认临时表空间
ALTER DATABASE TEMPORARY TABLESPACE temptbs;
4. 查询数据库的默认表空间
SELECT t.username, t.default_tablespace, t.temporary_tablespace FROM dba_users t;
5. 允许数据文件自动扩展
ALTER DATABASE DATAFILE 'D:\oracle\tbs01_1.dbf' AUTOEXTEND ON NEXT 10m MAXSIZE 100m;
6. 使用表空间脱机/联机 (有效/无效)
ALTER TABLESPACE tbs01 ONLINE; -- 联机、有效
ALTER TABLESPACE tbs01 OFFLINE; -- 脱机、无效
7. 使表空间只读(仍可执行 drop 删除对象操作)
ALTER TABLESPACE tbs01 READ ONLY;
8. 使表空间可读写(脱机状态的表空间不能修改为读写状态)
ALTER TABLESPACE tbs01 READ WRITE;
4.1 Preguntas frecuentes
1. Se expande automáticamente, ¿por qué indica que no hay suficiente espacio?
- Superado
maxsize
, consulte el ejemplo anterior 3.1 La tabla no se puede expandir en el espacio de la tabla
AUTOEXTEND ON NEXT 1m MAXSIZE 2m
2. ¿Cuál es el siguiente valor predeterminado de autoextender activado?
- Cuando el
allocation_type = SYSTEM
tiempo, el siguiente valor unificado asignado por el sistema, no es fijo - Cuando el
allocation_type = UNIFORM
tiempo, el siguiente valor es fijo, el siguiente
extent management local uniform size 8m -- next = 8m