-
Notifications
You must be signed in to change notification settings - Fork 1
/
ddl.xml
14382 lines (13476 loc) · 846 KB
/
ddl.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE chapter>
<chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="ddl" xml:lang="ru">
<info>
<title>Операторы DDL</title>
</info>
<para>Data Definition Language (DDL) — язык описания данных. С помощью этого подмножества языка
создаются, модифицируются и удаляются объекты базы данных (т.е. Метаданные). </para>
<section xml:id="ddl-database">
<info>
<title>DATABASE</title>
</info>
<para>В данном разделе описываются вопросы создания базы данных, подключения к существующей
базе данных, изменения структуры файлов, перевод базы данных в состояние, необходимое
для безопасного резервного копирования, и обратно и удаления базы данных. </para>
<section xml:id="ddl-database-create">
<info>
<title>CREATE DATABASE</title>
<keywordset>
<keyword>CREATE DATABASE</keyword>
<keyword>CREATE SCHEMA</keyword>
</keywordset>
</info>
<indexterm><primary>CREATE DATABASE</primary></indexterm>
<formalpara>
<title>Назначение:</title>
<para>Создание новой базы данных.</para>
</formalpara>
<formalpara>
<title>Доступно в:</title>
<para>DSQL, ESQL.</para>
</formalpara>
<formalpara>
<title>Синтаксис:</title>
<para>
<programlisting>
CREATE {DATABASE | SCHEMA} '<replaceable><filespec></replaceable>'
[USER <replaceable>username</replaceable> [PASSWORD '<replaceable>password</replaceable>'] [ROLE <replaceable>rolename</replaceable>]]
[PAGE_SIZE [=] <replaceable>size</replaceable>]
[LENGTH [=] <replaceable>num</replaceable> [PAGE[S]]
[SET NAMES '<replaceable>charset</replaceable>']
[DEFAULT CHARACTER SET <replaceable>default_charset</replaceable>
[COLLATION <replaceable>collation</replaceable>]]
[<replaceable><sec_file></replaceable> [<replaceable><sec_file></replaceable> ...]]
[DIFFERENCE FILE '<replaceable>diff_file</replaceable>'];
<replaceable><filespec></replaceable> ::= [<replaceable><server_spec></replaceable>]{<replaceable>filepath</replaceable> | <replaceable>db_alias</replaceable>}
<replaceable><server_spec></replaceable> ::=
<replaceable>host</replaceable>[\<replaceable>port</replaceable> | <replaceable>service</replaceable>]:
| \\<replaceable>host</replaceable>[@<replaceable>port</replaceable> | <replaceable>service</replaceable>]\
| <replaceable><protocol></replaceable>://[<replaceable>host</replaceable>[:<replaceable>port</replaceable> | <replaceable>service</replaceable>]/]
<replaceable><protocol></replaceable> = inet | inet4 | inet6 | wnet | xnet
<replaceable><sec_file></replaceable> ::= FILE '<replaceable>filepath</replaceable>'
[LENGTH [=] <replaceable>num</replaceable> [PAGE[S]] [STARTING [AT [PAGE]] <replaceable>pagenum</replaceable>]
</programlisting>
</para>
</formalpara>
<para>
<table frame="all">
<title>Параметры оператора CREATE DATABASE</title>
<?dbfo keep-together='auto'?>
<tgroup cols="2">
<colspec colname="colArgument" colnum="1" colwidth="1.2*" align="left"/>
<colspec colname="colDesc" colnum="2" colwidth="2.8*" align="left"/>
<thead>
<row valign="middle">
<entry align="center">Параметр</entry>
<entry align="center">Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry><replaceable>filespec</replaceable></entry>
<entry>
<para>Спецификация первичного файла базы данных.</para>
</entry>
</row>
<row>
<entry><replaceable>server_spec</replaceable></entry>
<entry>
<para>Спецификация удалённого сервера. Включает в себя имя
сервера и протокол. Необходима, если база данных создаётся
на удалённом сервере.</para>
</entry>
</row>
<row>
<entry><replaceable>filepath</replaceable></entry>
<entry>
<para>Полный путь и имя файла, включая расширение. Имя файла
должно быть задано в соответствии со спецификой используемой
платформы.</para>
</entry>
</row>
<row>
<entry><replaceable>db_alias</replaceable></entry>
<entry>
<para>Псевдоним (alias) базы данных, присутствующий в файле
<filename>databases.conf</filename></para>
</entry>
</row>
<row>
<entry><replaceable>host</replaceable></entry>
<entry>
<para>Имя сервера или IP адрес, на котором создаётся база
данных.</para>
</entry>
</row>
<row>
<entry><replaceable>port</replaceable></entry>
<entry>
<para>Номер порта, который слушает удалённый сервер (параметр
<parameter>RemoteServicePort</parameter> файла
<filename>firebird.conf</filename>).</para>
</entry>
</row>
<row>
<entry><replaceable>service</replaceable></entry>
<entry><para>Имя сервиса. Должно совпадать со значением параметра
<parameter>RemoteServiceName</parameter> файла
<filename>firebird.conf</filename>.</para></entry>
</row>
<row>
<entry><replaceable>protocol</replaceable></entry>
<entry>
<para>Наименование протокола.</para>
</entry>
</row>
<row>
<entry><replaceable>username</replaceable></entry>
<entry>
<para>Имя пользователя-владельца базы данных. Может быть
заключено в одинарные или двойные кавычки. Если имя
пользователя заключено в двойные кавычки, то оно
чувствительно к регистру.</para>
</entry>
</row>
<row>
<entry><replaceable>password</replaceable></entry>
<entry>
<para>Пароль пользователя-владельца базы данных. Чувствительно к
регистру.</para>
</entry>
</row>
<row>
<entry><replaceable>role</replaceable></entry>
<entry>
<para>Имя роли, права которой могут учитываться при создании
базы данных. Может быть заключено в одинарные или двойные
кавычки. Если имя роли заключено в двойные кавычки, то оно
чувствительно к регистру.</para>
</entry>
</row>
<row>
<entry><replaceable>size</replaceable></entry>
<entry>
<para>Размер страницы для базы данных. Допустимые значения 4096,
8192, 16384. Размер страницы по умолчанию 8192.</para>
</entry>
</row>
<row>
<entry><replaceable>num</replaceable></entry>
<entry>
<para>Максимальный размер первичного или вторичного файла в
страницах.</para>
</entry>
</row>
<row>
<entry><replaceable>charset</replaceable></entry>
<entry>
<para>Задаёт набор символов подключения, доступного после
успешного создания базы данных.</para>
</entry>
</row>
<row>
<entry><replaceable>default_charset</replaceable></entry>
<entry>
<para>Задаёт набор символов по умолчанию для строковых типов
данных.</para>
</entry>
</row>
<row>
<entry><replaceable>collation</replaceable></entry>
<entry>
<para>Сортировка для набора символов по умолчанию.</para>
</entry>
</row>
<row>
<entry><replaceable>sec_file</replaceable></entry>
<entry>
<para>Спецификация вторичного файла.</para>
</entry>
</row>
<row>
<entry><replaceable>pagenum</replaceable></entry>
<entry>
<para>Номер страницы, с которой начинается вторичный файл базы
данных. </para>
</entry>
</row>
<row>
<entry><replaceable>diff_file</replaceable></entry>
<entry>
<para>Путь и имя дельта файла. </para>
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para>Оператор <database>CREATE DATABASE</database> создаёт новую базу данных. Вы можете
использовать <database>CREATE DATABASE</database> или <database>CREATE
SCHEMA</database>. Это синонимы. </para>
<para>База данных может состоять из одного или нескольких файлов. Первый, основной, файл
называется первичным, остальные файлы — вторичными. </para>
<note>
<para>В настоящее время многофайловые базы данных являются атавизмом. Многофайловые
базы данных имеет смысл использовать на старых файловых системах, в которых
существует ограничение на размер любого файла. Например, в FAT32 нельзя создать
файл больше 4х гигабайт. </para>
</note>
<para>Спецификация первичного файла — имя файла базы данных и его расширение с указанием
к нему полного пути в соответствии с правилами используемой операционной системы.
При создании базы данных файл базы данных должен отсутствовать. В противном случае
будет выдано сообщение об ошибке и база данных не будет создана. Если полный путь к
базе данных не указан, то база данных будет создана в одном из системных каталогов.
В каком именно зависит от операционной системы. </para>
<section xml:id="ddl-database-create-aliasedb">
<title>Использование псевдонимов БД</title>
<para>Вместо полного пути к первичному файлу базы можно использовать псевдонимы
(aliases). Псевдонимы описываются в файле <filename>databases.conf</filename> в
формате:
<programlisting>
<replaceable>alias</replaceable> = <replaceable>filepath</replaceable>
</programlisting>
</para>
<note>
<para>Помимо указания псевдонимов для базы данных в этом файле можно задать
параметры уровня базы данных для каждой описываемой базы данных. Эти
параметры задаются в фигурных скобках сразу после объявления
псевдонима.</para>
</note>
</section>
<section xml:id="ddl-database-create-remotely">
<title>Создание БД на удалённом сервере</title>
<para>При создании базы данных на удалённом сервере необходимо указать спецификацию
удалённого сервера. Спецификация удалённого сервера зависит от используемого
протокола. </para>
<para>Если вы при создании базы данных используете протокол TCP/IP, то спецификация
первичного файла должна выглядеть следующим образом:
<programlisting>
<replaceable>host</replaceable>[/<replaceable>port</replaceable> | <replaceable>service</replaceable>]:{<replaceable>filepath</replaceable> | <replaceable>db_alias</replaceable>}
</programlisting>
</para>
<para>Если вы при создании базы данных используете протокол под названием
именованные каналы (Name Pipes), то спецификация первичного файла должна
выглядеть следующим образом.
<programlisting>
\\<replaceable>host</replaceable>[@<replaceable>port</replaceable> | <replaceable>service</replaceable>]\{<replaceable>filepath</replaceable> | <replaceable>db_alias</replaceable>}
</programlisting>
</para>
<para>Существует также унифицированный URL-подобный синтаксис спецификации
удалённого сервера. В этом синтаксисе первым параметром указывается наименование
протокола, далее указывается имя сервера или IP адрес, номер порта и путь к
первичному файлу базы данных или псевдоним. В качестве протокола можно указать
следующие значения:<itemizedlist>
<listitem>
<para>INET — TCP/IP (сначала пробует подключится по протоколу TCP/IP v6,
если не получилось, то TCP/IP v4);</para>
</listitem>
<listitem>
<para>INET4 — TCP/IP v4 (начиная с 3.0.1);</para>
</listitem>
<listitem>
<para>INET6 — TCP/IP v6 (начиная с 3.0.1);</para>
</listitem>
<listitem>
<para>WNET — NetBEUI или протокол именованных каналов;</para>
</listitem>
<listitem>
<para>XNET — локальный протокол.</para>
</listitem>
</itemizedlist>
<programlisting>
<replaceable>protocol</replaceable>://[<replaceable>host</replaceable>[:<replaceable>port</replaceable> | <replaceable>service</replaceable>]/]{<replaceable>filepath</replaceable> | <replaceable>db_alias</replaceable>}
</programlisting>
</para>
</section>
<section xml:id="ddl-database-create-optionals">
<title>Необязательные параметры CREATE DATABASE</title>
<indexterm>
<primary>CREATE DATABASE</primary>
<secondary>USER</secondary>
</indexterm>
<indexterm>
<primary>CREATE DATABASE</primary>
<secondary>PASSWORD</secondary>
</indexterm>
<indexterm>
<primary>CREATE DATABASE</primary>
<secondary>ROLE</secondary>
</indexterm>
<para>Необязательные предложения <database>USER</database> и
<database>PASSWORD</database> задают, соответственно, имя и пароль
пользователя присутствующего в базе данных безопасности
(<filename>security3.fdb</filename> или той, что указана в параметре
<parameter>SecurityDatabase</parameter>). Пользователя и пароль можно не
указывать, если установлены переменные окружения <envar>ISC_USER</envar> и
<envar>ISC_PASSWORD</envar>. Необязательное предложение ROLE задаёт имя роли
(обычно это RDB$ADMIN), права которой будут учитываться при создании базы
данных. Роль должна быть назначена пользователю в соответствующей базе данных
безопасности. </para>
<para>Пользователь, указанный при создании базы данных, будет её владельцем. </para>
<indexterm>
<primary>CREATE DATABASE</primary>
<secondary>PAGE_SIZE</secondary>
</indexterm>
<para>Необязательное предложение <database>PAGE_SIZE</database> задаёт размер
страницы базы данных. Этот размер будет установлен для первичного файла и всех
вторичных файлов базы данных. При вводе размера страницы БД меньшего, чем 4096,
он будет автоматически изменён на 4096. Другие числа (не равные 4096, 8192 или
16384) будут изменены на ближайшее меньшее из поддерживаемых значений. Если
размер страницы базы данных не указан, то по умолчанию принимается значение
8192. </para>
<indexterm>
<primary>CREATE DATABASE</primary>
<secondary>LENGTH</secondary>
</indexterm>
<para>Необязательное предложение <database>LENGTH</database> задаёт максимальный
размер первичного или вторичного файла базы данных в страницах. При создании
базы данных её первичный или вторичный файл будут занимать минимально
необходимое количество страниц для хранения системных данных, не зависимо от
величины, установленной в предложении <database>LENGHT</database>. Для
единственного или последнего (в многофайловой базе данных) файла значение
<database>LENGTH</database> никак не влияет на его размер. Файл будет
автоматически увеличивать свой размер по мере необходимости. </para>
<indexterm>
<primary>CREATE DATABASE</primary>
<secondary>SET NAMES</secondary>
</indexterm>
<para>Необязательное предложение <database>SET NAMES</database> задаёт набор
символов подключения, доступного после успешного создания базы данных. По
умолчанию используется набор символов NONE. </para>
<indexterm>
<primary>CREATE DATABASE</primary>
<secondary>DEFAULT CHARACTER SET</secondary>
</indexterm>
<para>Необязательное предложение <database>DEFAULT CHARACTER SET</database> задаёт
набор символов по умолчанию для строковых типов данных. Наборы символов
применяются для типов <database class="datatype">CHAR</database>, <database
class="datatype">VARCHAR</database> и <database class="datatype"
>BLOB</database>. По умолчанию используется набор символов NONE. Для набора
символов по умолчанию можно также указать сортировку по умолчанию
(<database>COLLATION</database>). В этом случае сортировка станет
умалчиваемой для набора символов по умолчанию (т.е. для всей БД за исключением
случаев использования других наборов символов). </para>
<indexterm>
<primary>CREATE DATABASE</primary>
<secondary>STARTING AT</secondary>
</indexterm>
<para>Предложение <database>STARTING AT</database> задаёт номер страницы базы
данных, с которой должен начинаться следующий файл базы данных. Когда предыдущий
файл будет полностью заполнен данными в соответствии с заданным номером
страницы, система начнёт помещать вновь добавляемые данные в следующий файл базы
данных. </para>
<indexterm>
<primary>CREATE DATABASE</primary>
<secondary>DIFFERENCE FILE</secondary>
</indexterm>
<para>Необязательное предложение <database>DIFFERENCE FILE</database> задаёт путь и
имя дельта файла, в который будут записываться изменения, внесённые в БД после
перевода её в режим <quote>безопасного копирования</quote>
(<quote>copy-safe</quote>) путём выполнения команды ALTER DATABASE BEGIN
BACKUP. Полное описание данного параметра см. в <link
linkend="ddl-database-alter">ALTER DATABASE</link>. </para>
<para>Для того чтобы база данных была создана в нужном вам диалекте SQL, следует
перед выполнением оператора создания базы данных задать нужный диалект, выполнив
оператор SET SQL DIALECT. По умолчанию база данных создаётся в 3 диалекте.
</para>
</section>
<section xml:id="ddl-database-create-who">
<title>Кто может создать базу данных?</title>
<para>Выполнить оператор CREATE DATABASE могут: <itemizedlist spacing="compact">
<listitem>
<para><link linkend="security-administrators"
>Администраторы</link>;</para>
</listitem>
<listitem>
<para>Пользователи с привилегией <database>CREATE DATABASE</database>.
</para>
</listitem>
</itemizedlist>
</para>
</section>
<section xml:id="ddl-database-create-examples">
<title>Примеры</title>
<example>
<title>Создание базы данных в операционной системе Windows</title>
<para>Создание базы данных в операционной системе Windows расположенной на диске
D с размером страницы 8192. Владельцем базы данных будет пользователь
wizard. База данных будет в 1 диалекте, и использовать набор символов по
умолчанию WIN1251.
<programlisting language="sql">
SET SQL DIALECT 1;
CREATE DATABASE 'D:\test.fdb'
USER wizard PASSWORD 'player' ROLE RDB$ADMIN
DEFAULT CHARACTER SET WIN1251;
</programlisting>
</para>
</example>
<example>
<title>Создание базы данных в операционной системе Linux</title>
<para>Создание базы данных в операционной системе Linux с размером страницы
4096. Владельцем базы данных будет пользователь wizard. База данных будет в
3 диалекте, и использовать набор символов по умолчанию UTF8 с умалчиваемой
сортировкой UNICODE_CI_AI.
<programlisting language="sql">
CREATE DATABASE '/home/firebird/test.fdb'
USER "wizard" PASSWORD 'player' ROLE 'RDB$ADMIN'
PAGE_SIZE = 4096
DEFAULT CHARACTER SET UTF8 COLLATION UNICODE_CI_AI;
</programlisting>
</para>
</example>
<important>
<para>В данном случае при создании базы данных будет учитываться регистр
символов для имени пользователя, потому что оно указано в двойных
кавычках.</para>
</important>
<example>
<title>Создание базы данных на удалённом сервере</title>
<para>Создание базы данных на удалённом сервере baseserver расположенном по
пути, на который ссылается псевдоним test, описанный в файле
<filename>databases.conf</filename>. Используется протокол TCP.
Владельцем базы данных будет пользователь wizard.
<programlisting language="sql">
CREATE DATABASE 'baseserver:test'
USER wizard PASSWORD 'player' ROLE RDB$ADMIN
DEFAULT CHARACTER SET UTF8;
</programlisting>
То же самое с использованием унифицированного URL-подобного синтаксиса
задания спецификации удалённого сервера.
<programlisting language="sql">
CREATE DATABASE 'inet://baseserver:3050/test'
USER wizard PASSWORD 'player' ROLE RDB$ADMIN
DEFAULT CHARACTER SET UTF8;
</programlisting>
или
<programlisting language="sql">
CREATE DATABASE 'inet://baseserver:gds_db/test'
USER wizard PASSWORD 'player' ROLE RDB$ADMIN
DEFAULT CHARACTER SET UTF8;
</programlisting>
Начиная с Firebird 3.0.1 можно указать какой именно из протоколов IP v4 или
IP v6 вы хотите использовать.
<programlisting language="sql">
CREATE DATABASE 'inet4://baseserver/test'
USER wizard PASSWORD 'player' ROLE RDB$ADMIN
DEFAULT CHARACTER SET UTF8;
</programlisting>
или
<programlisting language="sql">
CREATE DATABASE 'inet6://baseserver/test'
USER wizard PASSWORD 'player' ROLE RDB$ADMIN
DEFAULT CHARACTER SET UTF8;
</programlisting>
Создание базы данных с указанием IP адреса (IPv4) вместо указания имени
сервера.
<programlisting language="sql">
CREATE DATABASE '127:0:0:1:test'
USER wizard PASSWORD 'player' ROLE RDB$ADMIN
DEFAULT CHARACTER SET UTF8;
</programlisting>
Создание базы данных с указанием IP адреса (IPv6) вместо указания имени
сервера.
<programlisting language="sql">
CREATE DATABASE '[::1]:test'
USER wizard PASSWORD 'player' ROLE RDB$ADMIN
DEFAULT CHARACTER SET UTF8;
</programlisting>
</para>
</example>
<example>
<title>Создание многофайловой базы данных</title>
<para>Создание базы данных в 3 диалекте с набором символов по умолчанию UTF8.
Первичный файл будет содержать 10000 страниц с размером страницы 8192. Как
только в процессе работы с базой данных первичный файл будет заполнен, СУБД
будет помещать новые данные во вторичный файл
<filename>test.fdb2</filename>. Аналогичные действия будут происходить и со
вторым вторичным файлом. Размер последнего файла будет увеличиваться до тех
пор, пока это позволяет используемая операционная система или пока не будет
исчерпана память на внешнем носителе.
<programlisting language="sql">
SET SQL DIALECT 3;
CREATE DATABASE 'baseserver:D:\test.fdb'
USER wizard PASSWORD 'player' ROLE 'RDB$ADMIN'
PAGE_SIZE = 8192
DEFAULT CHARACTER SET UTF8
FILE 'D:\test.fdb2'
STARTING AT PAGE 10001
FILE 'D:\test.fdb3'
STARTING AT PAGE 20001;
</programlisting>
</para>
</example>
<example>
<title>Создание многофайловой базы данных 2</title>
<para>Создание базы данных в 3 диалекте с набором символов по умолчанию UTF8.
Первичный файл будет содержать 10000 страниц с размером страницы 8192. Как
только в процессе работы с базой данных первичный файл будет заполнен, СУБД
будет помещать новые данные во вторичный файл
<filename>test.fdb2</filename>. Аналогичные действия будут происходить и со
вторым вторичным файлом.
<programlisting language="sql">
SET SQL DIALECT 3;
CREATE DATABASE 'baseserver:D:\test.fdb'
USER wizard PASSWORD 'player' ROLE 'RDB$ADMIN'
PAGE_SIZE = 8192
LENGTH 10000 PAGES
DEFAULT CHARACTER SET UTF8
FILE 'D:\test.fdb2'
FILE 'D:\test.fdb3'
STARTING AT PAGE 20001;
</programlisting>
</para>
</example>
<formalpara>
<title>См. также:</title>
<para>
<link linkend="ddl-database-alter">ALTER DATABASE</link>, <link
linkend="ddl-database-drop">DROP DATABASE</link>. </para>
</formalpara>
</section>
</section>
<section xml:id="ddl-database-alter">
<info>
<title>ALTER DATABASE</title>
<keywordset>
<keyword>ALTER DATABASE</keyword>
<keyword>ALTER SCHEMA</keyword>
<keyword>ADD DIFFERENCE FILE</keyword>
<keyword>DROP DIFFERENCE FILE</keyword>
<keyword>BEGIN BACKUP</keyword>
<keyword>END BACKUP</keyword>
<keyword>SET DEFAULT CHARACTER SET</keyword>
<keyword>SET LINGER TO</keyword>
<keyword>DROP LINGER</keyword>
<keyword>ENCRYPT WITH</keyword>
<keyword>DECRYPT</keyword>
</keywordset>
</info>
<indexterm>
<primary>ALTER DATABASE</primary>
</indexterm>
<formalpara>
<title>Назначение:</title>
<para>Изменение структуры файлов базы данных, переключение её в состояние
<quote>безопасное для копирования</quote> или изменение некоторых свойств
базы данных. </para>
</formalpara>
<formalpara>
<title>Доступно в:</title>
<para>DSQL, ESQL.</para>
</formalpara>
<formalpara>
<title>Синтаксис:</title>
<para>
<programlisting>
ALTER {DATABASE | SCHEMA}
{<replaceable><add_sec_clause></replaceable> [<replaceable><add_sec_clausee></replaceable> ...]}
| {ADD DIFFERENCE FILE '<replaceable>diff_file</replaceable>' | DROP DIFFERENCE FILE}
| {{BEGIN | END} BACKUP}
| {SET DEFAULT CHARACTER SET <replaceable>charset</replaceable>}
| {SET LINGER TO <replaceable>seconds</replaceable> | DROP LINGER}
| {ENCRYPT WITH <replaceable>plugin_name</replaceable> [KEY <replaceable>key_name</replaceable>] | DECRYPT};
<replaceable><add_sec_clause></replaceable> ::= ADD FILE <replaceable><sec_file></replaceable>
<replaceable><sec_file></replaceable> ::= '<replaceable>filepath</replaceable>'
[STARTING [AT [PAGE]] <replaceable>pagenum</replaceable>]
[LENGTH [=] <replaceable>num</replaceable> [PAGE[S]]
</programlisting>
</para>
</formalpara>
<para>
<table frame="all">
<title>Параметры оператора ALTER DATABASE</title>
<?dbfo keep-together='auto'?>
<tgroup cols="2">
<colspec colname="c1" colnum="1" colwidth="1.2*" align="left"/>
<colspec colname="c2" colnum="2" colwidth="2.8*" align="justify"/>
<thead>
<row>
<entry align="center">Параметр</entry>
<entry align="center">Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry><replaceable>add_sec_clause</replaceable></entry>
<entry>
<para>Инструкция для добавления вторичного файла базы
данных.</para>
</entry>
</row>
<row>
<entry><replaceable>sec_file</replaceable></entry>
<entry>
<para>Спецификация вторичного файла.</para>
</entry>
</row>
<row>
<entry><replaceable>filepath</replaceable></entry>
<entry>
<para>Полный путь и имя дельта файла или вторичного файла базы
данных.</para>
</entry>
</row>
<row>
<entry><replaceable>pagenum</replaceable></entry>
<entry>
<para>Номер страницы, с которой начинается вторичный файл базы
данных.</para>
</entry>
</row>
<row>
<entry><replaceable>num</replaceable></entry>
<entry>
<para>Максимальный размер вторичного файла в страницах.</para>
</entry>
</row>
<row>
<entry><replaceable>diff_file</replaceable></entry>
<entry>
<para>Путь и имя дельта файла.</para>
</entry>
</row>
<row>
<entry><replaceable>charset</replaceable></entry>
<entry>
<para>Новый набор символов по умолчанию для базы данных.</para>
</entry>
</row>
<row>
<entry><replaceable>seconds</replaceable></entry>
<entry>
<para>Задержка в секундах.</para>
</entry>
</row>
<row>
<entry><replaceable>plugin_name</replaceable></entry>
<entry>
<para>Имя плагина шифрования.</para>
</entry>
</row>
<row>
<entry><replaceable>key_name</replaceable></entry>
<entry>
<para>Имя ключа шифрования.</para>
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para>Оператор <database>ALTER DATABASE</database> изменяет структуру файлов базы данных
или переключает её в состояние <quote>безопасное для копирования</quote>. </para>
<section xml:id="ddl-database-alter-addfile">
<title>Добавление вторичного файла</title>
<indexterm>
<primary>ALTER DATABASE</primary>
<secondary>ADD FILE</secondary>
</indexterm>
<para>Предложение <database>ADD FILE</database> добавляет к базе данных вторичный
файл. Для вторичного файла необходимо указывать полный путь к файлу и имя
вторичного файла. Описание вторичного файла аналогично тому, что описано в
операторе CREATE DATABASE. </para>
</section>
<section xml:id="ddl-database-alter-add_diffile">
<title>Изменение пути и имени дельта файла</title>
<indexterm>
<primary>ALTER DATABASE</primary>
<secondary>ADD DIFFERENCE FILE</secondary>
</indexterm>
<para>Предложение <database>ADD DIFFERENCE FILE</database> задаёт путь и имя дельта
файла, в который будут записываться изменения, внесённые в базу данных после
перевода её в режим <quote>безопасного копирования</quote>
(<quote>copy-safe</quote>). Этот оператор в действительности не добавляет
файла. Он просто переопределяет умалчиваемые имя и путь файла дельты. Для
изменения существующих установок необходимо сначала удалить ранее указанное
описание файла дельты с помощью оператора DROP DIFFERENCE FILE, а затем задать
новое описание файла дельты. Если не переопределять путь и имя файла дельты, то
он будет иметь тот же путь и имя, что и БД, но с расширением
<filename>.delta</filename>. </para>
<note>
<para>При задании относительного пути или только имени файла дельты он будет
создаваться в текущем каталоге сервера. Для операционных систем Windows это
системный каталог. </para>
</note>
<indexterm>
<primary>ALTER DATABASE</primary>
<secondary>DROP DIFFERENCE FILE</secondary>
</indexterm>
<para>Предложение <database>DROP DIFFERENCE FILE</database> удаляет описание (путь и
имя) файла дельты, заданное ранее командой <database>ADD DIFFERENCE
FILE</database>. На самом деле при выполнении этого оператора файл не
удаляется. Он удаляет путь и имя файла дельты и при последующем переводе БД в
режим <quote>безопасного копирования</quote> будут использованы значения по
умолчанию (т.е. тот же путь и имя что и у файла БД, но с расширением
<filename>.delta</filename>). </para>
</section>
<section xml:id="ddl-database-alter-backup">
<title>Перевод базы данных в режим <quote>безопасного копирования</quote></title>
<indexterm>
<primary>ALTER DATABASE</primary>
<secondary>BEGIN BACKUP</secondary>
</indexterm>
<para>Предложение <database>BEGIN BACKUP</database> предназначено для перевода базы
данных в режим <quote>безопасного копирования</quote>
(<quote>copy-safe</quote>). Этот оператор <quote>замораживает</quote> основной
файл базы данных, что позволяет безопасно делать резервную копию средствами
файловой системы, даже если пользователи подключены и выполняют операции с
данными. При этом все изменения, вносимые пользователями в базу данных, будут
записаны в отдельный файл, так называемый дельта файл (<emphasis role="italic"
>delta file</emphasis>). </para>
<note>
<para>Оператор BEGIN BACKUP, не смотря на синтаксис, не начинает резервное
копирование базы данных, а лишь создаёт условия для его осуществления.
</para>
</note>
<indexterm>
<primary>ALTER DATABASE</primary>
<secondary>END BACKUP</secondary>
</indexterm>
<para>Предложение <database>END BACKUP</database> предназначено для перевода базы
данных из режима <quote>безопасного копирования</quote>
(<quote>copy-safe</quote>) в режим нормального функционирования. Этот
оператор объединяет файл дельты с основным файлом базы данных и восстанавливает
нормальное состояние работы, таким образом, закрывая возможность создания
безопасных резервных копий средствами файловой системы. (При этом безопасное
резервное копирование с помощью утилиты <application>gbak</application> остаётся
доступным). </para>
</section>
<section xml:id="ddl-database-alter-charset">
<title>Изменение набора символов по умолчанию</title>
<indexterm>
<primary>ALTER DATABASE</primary>
<secondary>SET DEFAULT CHARACTER SET</secondary>
</indexterm>
<para>Предложение <database>SET DEFAULT CHARACTER SET</database> изменяет набор
символов по умолчанию для базы данных. Это изменение не затрагивает существующие
данные. Новый набор символов по умолчанию будет использоваться только в
последующих DDL командах, кроме того для них будет использоваться сортировка по
умолчанию для нового набора символов.</para>
</section>
<section xml:id="ddl-database-alter-linger">
<title>LINGER</title>
<indexterm>
<primary>ALTER DATABASE</primary>
<secondary>SET LINGER</secondary>
</indexterm>
<para>Предложение <database>SET LINGER</database> позволяет установить задержку
закрытия базы данных. Этот механизм позволяет ядру SuperServer, сохранять базу
данных в открытом состоянии в течение некоторого времени после того как
последние соединение закрыто, т.е. иметь механизм задержки закрытия базы данных.
Это может помочь улучшить производительность и уменьшить издержки в случаях,
когда база данных часто открывается и закрывается, сохраняя при этом ресурсы
<quote>разогретыми</quote> до следующего открытия. </para>
<tip>
<para>Такой режим может быть полезен для Web приложений, в которых коннект к
базе обычно <quote>живёт</quote> очень короткое время. </para>
</tip>
<indexterm>
<primary>ALTER DATABASE</primary>
<secondary>DROP LINGER</secondary>
</indexterm>
<para>Предложение <database>DROP LINGER</database> удаляет задержку и возвращает
базу данных к нормальному состоянию (без задержки). Эта команда эквивалентна
установки задержки в 0. </para>
<tip>
<para>Удаление LINGER не самое лучшее решение для временной необходимости его
отключения для некоторых разовых действий, требующих принудительного
завершения работы сервера. Утилита <application>gfix</application> теперь
имеет переключатель <option>-NoLinger</option>, который сразу закроет
указанную базу данных, после того как последнего соединения не стало,
независимо от установок LINGER в базе данных. Установка LINGER будет
сохранена и нормально отработает в следующий раз. </para>
<para>Кроме того, одноразовое переопределение доступно также через сервисы API,
с использованием тега isc_spb_prp_nolinger, например (в такой строке): </para>
<para>
<programlisting>
fbsvcmgr host:service_mgr user sysdba password xxx
action_properties dbname employee prp_nolinger
</programlisting>
</para>
</tip>
</section>
<section xml:id="ddl-database-alter-encrypt">
<title>Шифрование базы данных</title>
<indexterm>
<primary>ALTER DATABASE</primary>
<secondary>ENCRYPT WITH</secondary>
</indexterm>
<para>Предложение <database>ENCRYPT WITH</database> шифрует базу данных с помощью
указанного плагина шифрования. Шифрование начинается сразу после этого оператора
и будет выполняться в фоновом режиме. Нормальная работа с базами данных не
нарушается во время шифрования. </para>
<note>
<para>Процесс шифрования может быть проконтролирован с помощью поля
MON$CRYPT_PAGE в псевдо-таблице MON$DATABASE или просмотрен на странице
заголовка базы данных с помощью <command>gstat -e</command>. </para>
<para>
<command>gstat –h</command> также будет предоставлять ограниченную
информацию о состоянии шифрования. </para>
<para>Например, следующий запрос
<programlisting language="sql">
select MON$CRYPT_PAGE * 100 / MON$PAGES from MON$DATABASE
</programlisting>
будет отображать процент завершения процесса шифрования. </para>
</note>
<para>Необязательное предложение KEY позволяет передать имя ключа для плагина
шифрования. Что делать с этим именем ключа решает плагин.</para>
<indexterm>
<primary>ALTER DATABASE</primary>
<secondary>DECRYPT</secondary>
</indexterm>
<para>Предложение <database>DECRYPT</database> дешифрует базу данных. </para>
</section>
<section xml:id="ddl-database-alter-who">
<title>Кто может выполнить ALTER DATABASE?</title>
<para>Выполнить оператор <database>ALTER DATABASE</database> могут: <itemizedlist
spacing="compact">
<listitem>
<para><link linkend="security-administrators"
>Администраторы</link>;</para>
</listitem>
<listitem>
<para>Владелец базы данных; </para>
</listitem>
<listitem>
<para>Пользователи с привилегией <database>ALTER DATABASE</database>.
</para>
</listitem>
</itemizedlist>
</para>
</section>
<section xml:id="ddl-database-alter-examples">
<title>Примеры</title>
<example>
<title>Добавление вторичного файла в базу данных</title>
<para>Как только в предыдущем первичном или вторичных файлах будет заполнено
30000 страниц, СУБД будет помещать данные во вторичный файл
<filename>test4.fdb</filename>.
<programlisting language="sql">
ALTER DATABASE
ADD FILE 'D:\test.fdb4'
STARTING PAGE 30001;
</programlisting>
</para>
</example>
<example>
<title>Установка пути и имени файла дельты</title>
<para>
<programlisting language="sql">
ALTER DATABASE
ADD DIFFERENCE FILE 'D:\test.diff';
</programlisting>
</para>
</example>
<example>
<title>Удаление описание файла дельты</title>
<para>
<programlisting language="sql">
ALTER DATABASE
DROP DIFFERENCE FILE;
</programlisting>
</para>
</example>
<example>
<title>Перевод базы данных в режим <quote>безопасного
копирования</quote></title>
<para>
<programlisting language="sql">
ALTER DATABASE
BEGIN BACKUP;
</programlisting>
</para>
</example>
<example>
<title>Возвращение базы данных в режим нормального функционирования из режима
<quote>безопасного копирования</quote></title>
<para>
<programlisting language="sql">
ALTER DATABASE
END BACKUP;
</programlisting>
</para>
</example>
<example>
<title>Изменение набора символов по умолчанию для базы данных</title>
<para>
<programlisting language="sql">
ALTER DATABASE SET DEFAULT CHARACTER SET WIN1251;
</programlisting>
</para>
</example>
<example>
<title>Установка задержки в 30 секунд</title>
<para>
<programlisting language="sql">
ALTER DATABASE SET LINGER TO 30;
</programlisting>
</para>
</example>
<example>
<title>Удаление задержки</title>
<para>
<programlisting language="sql">
ALTER DATABASE DROP LINGER;
</programlisting>
</para>
<para>или</para>
<para>
<programlisting language="sql">
ALTER DATABASE SET LINGER TO 0;
</programlisting>
</para>
</example>
<example>
<title>Шифрование базы данных</title>
<para>
<programlisting language="sql">
ALTER DATABASE ENCRYPT WITH DbCrypt;
</programlisting>
</para>
</example>
<example>
<title>Дешифрование базы данных</title>
<para>
<programlisting language="sql">
ALTER DATABASE DECRYPT;
</programlisting>
</para>
</example>
<formalpara>
<title>См. также:</title>
<para>
<link linkend="ddl-database-create">CREATE DATABASE</link>, <link
linkend="ddl-database-drop">DROP DATABASE</link>. </para>
</formalpara>
</section>
</section>
<section xml:id="ddl-database-drop">
<info>
<title>DROP DATABASE</title>
<keywordset>
<keyword>DROP DATABASE</keyword>
</keywordset>
</info>
<indexterm><primary>DROP DATABASE</primary></indexterm>