0

Microsoft SQL Server 2008 R2 を使用しています。100 個のテーブルを含むデータベースがあります。それらの 20 は私の構成です。時々、構成を更新し、これらの 20 個のテーブルをフィールド (運用、テストなど) に展開する必要があります。残りの 80 個のテーブルは保持する必要があります。bcp や SSIS などのオプションを調べました。これに関するあなたの提案や経験は何ですか?

4

3 に答える 3

0

最初の行として「truncate table tablename」を使用してスクリプト ファイルを作成し、次にテーブルを埋めるための「insert」ステートメントの文字列を作成します。1 つのファイルに 20 個のテーブルすべてを「更新」することも、各ファイルに 1 つのテーブルを含めることもできます。

于 2013-06-15T05:09:04.610 に答える
0

liquibaseのようなデータベース移行ツールを使用することをお勧めします。データベースへのすべての変更をリビジョン管理下に置きます。

次の例はH2データベースを対象としていますが、liquibaseは sql server もサポートしています。Liquibase は Java ツールですが、Windows のコマンドラインから使用できます。

例 (スキーマの管理)

更新操作は次のように実行されます。

liquibase --url=jdbc:h2:db/scottTiger \
          --driver=org.h2.Driver \
          --username=user \
          --password=pass \
          --classpath=/path/to/db/jar/h2-1.3.172.jar \
          --changeLogFile=scottTiger.sql \
          update

このコマンドは、特別にフォーマットされた sql ファイルで定義された変更セットを調べ、不足している変更のみを実行します。

これは、データベースをその場で更新 (移行) したり、ゼロから構築したりできることを意味します。

scottTiger.sql

--liquibase formatted sql

--changeset mark:1
CREATE TABLE BONUS (ENAME VARCHAR(10) NOT NULL, JOB VARCHAR(9) NOT NULL, SAL DECIMAL(7, 2), COMM DECIMAL(7, 2));
ALTER TABLE BONUS ADD CONSTRAINT BONUS_PK PRIMARY KEY (ENAME, JOB);
--rollback DROP TABLE BONUS;

--changeset mark:2
CREATE TABLE DEPARTMENT (DEPTNO INT NOT NULL, NAME VARCHAR(14), LOCATION VARCHAR(13), CONSTRAINT DEPT_PK PRIMARY KEY (DEPTNO));
--rollback DROP TABLE DEPARTMENT;


--changeset mark:3
CREATE TABLE EMPLOYEE (EMPNO INT NOT NULL, NAME VARCHAR(10), JOB VARCHAR(9), BOSS INT, HIREDATE VARCHAR(12), SALARY DECIMAL(7, 2), COMM DECIMAL(7, 2), DEPTNO INT, CONSTRAINT EMP_PK PRIMARY KEY (EMPNO));
ALTER TABLE PUBLIC.EMPLOYEE ADD CONSTRAINT BOSS_FK FOREIGN KEY (BOSS) REFERENCES PUBLIC.EMPLOYEE (EMPNO) ON UPDATE RESTRICT ON DELETE RESTRICT;
ALTER TABLE PUBLIC.EMPLOYEE ADD CONSTRAINT DEPARTMENT_FK FOREIGN KEY (DEPTNO) REFERENCES PUBLIC.DEPARTMENT (DEPTNO) ON UPDATE RESTRICT ON DELETE RESTRICT;
--rollback DROP TABLE EMPLOYEE;


--changeset mark:4
CREATE TABLE PROJECT (PROJECTNO INT NOT NULL, DESCRIPTION VARCHAR(100), START_DATE VARCHAR(12), END_DATE VARCHAR(12), CONSTRAINT PROJECT_PK PRIMARY KEY (PROJECTNO));
--rollback DROP TABLE PROJECT;

--changeset mark:5
CREATE TABLE ROLE (ROLE_ID INT NOT NULL, DESCRIPTION VARCHAR(100), CONSTRAINT ROLE_PK PRIMARY KEY (ROLE_ID));
--rollback DROP TABLE ROLE;


--changeset mark:6
CREATE TABLE PROJECT_PARTICIPATION (PROJECTNO INT NOT NULL, EMPNO INT NOT NULL, START_DATE VARCHAR(12) NOT NULL, END_DATE VARCHAR(12), ROLE_ID INT);
ALTER TABLE PROJECT_PARTICIPATION ADD CONSTRAINT PARTICIPATION_PK PRIMARY KEY (PROJECTNO, EMPNO, START_DATE);
ALTER TABLE PUBLIC.PROJECT_PARTICIPATION ADD CONSTRAINT EMPLOYEE_FK FOREIGN KEY (EMPNO) REFERENCES PUBLIC.EMPLOYEE (EMPNO) ON UPDATE RESTRICT ON DELETE RESTRICT;
ALTER TABLE PUBLIC.PROJECT_PARTICIPATION ADD CONSTRAINT PROJECT_FK FOREIGN KEY (PROJECTNO) REFERENCES PUBLIC.PROJECT (PROJECTNO) ON UPDATE RESTRICT ON DELETE RESTRICT;
ALTER TABLE PUBLIC.PROJECT_PARTICIPATION ADD CONSTRAINT ROLE_FK FOREIGN KEY (ROLE_ID) REFERENCES PUBLIC.ROLE (ROLE_ID) ON UPDATE RESTRICT ON DELETE RESTRICT;
--rollback DROP TABLE PROJECT_PARTICIPATION;

--changeset mark:7
CREATE TABLE SALARYGRADE (GRADE INT NOT NULL, LOSAL INT NOT NULL, HISAL INT NOT NULL, CONSTRAINT SALGRADE_PK PRIMARY KEY (GRADE));
--rollback DROP TABLE SALARYGRADE;

ノート:

  • 各変更セットには固有の名前があります。Liquibase は、データベース インスタンスに対して実行された各変更セットの記録を保持します
  • ロールバックアクションを定義できます。データベースの変更を元に戻すための非常に便利な機能。

例(データの管理)

Liquibase には、テーブル データの管理に活用できる便利なコンテキスト機能があります。

次の例では、コマンドラインで「dev」コンテキストを指定しています。

liquibase --url=jdbc:h2:db/scottTiger \
          --driver=org.h2.Driver \
          --username=user \
          --password=pass \
          --classpath=/path/to/db/jar/h2-1.3.172.jar \
          --changeLogFile=scottTiger.sql \
          --contexts=dev
          update

scottTiger.sql

変更セット ファイル内では、変更セットごとにコンテキストがオプションで示されます。これにより、liquibase は特定の変更セットを選択的に実行できます。

--changeset mark:8 context:dev
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (1,2,3);
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (2,2,3);
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (3,2,3);
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (4,2,3);
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (5,2,3);
--rollback DELETE FROM SALARYGRADE;

--changeset mark:9 context:test
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (1,20,30);
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (2,20,30);
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (3,20,30);
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (4,20,30);
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (5,20,30);
--rollback DELETE FROM SALARYGRADE;

--changeset mark:10 context:prod
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (1,200,300);
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (2,200,300);
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (3,200,300);
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (4,200,300);
INSERT INTO SALARYGRADE (GRADE,LOSAL,HISAL) VALUES (5,200,300);
--rollback DELETE FROM SALARYGRADE;
于 2013-06-15T12:56:20.610 に答える