Esempio n. 1
0
    public function create($conn_asm, $conn_db, $id, $password, $disk_type) {
        $dg = $id;
        $tablespace = $id;

        // Fetch Available Disk
        $drive = new Drive();
        $available_disk = $drive->fetch_available_disk($conn_asm, $disk_type);
        if ($available_disk == FALSE ) {
            $this->err_msg = array_merge($this->err_msg, $drive->err_msg);
            array_push($this->err_msg, "新たなディスクの確保に失敗しました。");
            return(FALSE);
        }
        if ($available_disk == NULL ) {
            array_push($this->err_msg, "利用可能なディスクがありません。");
            return(FALSE);
        }

        // Create Diskgroup
        $available_disk["name"] = $dg . "_" . $disk_type;
        $result = $drive->create_dg($conn_asm, $dg, $available_disk);
        if ($result == FALSE) {
            $this->err_msg = array_merge($this->err_msg, $drive->err_msg);
            array_push($this->err_msg, "新たなディスクグループを作成出来ませんでした。");
            return(FALSE);
        }

        // Mount Diskgroup
        $result = $drive->mount_dg($conn_asm, $dg);
        if ($result == FALSE) {
            $this->err_msg = array_merge($this->err_msg, $drive->err_msg);
            array_push($this->err_msg, "ディスクグループをマウント出来ませんでした。");
            return(FALSE);
        }

        // Create Tablespace
        $result = $drive->create_tablespace($conn_db, $tablespace, $dg);
        if ($result == FALSE) {
            $this->err_msg = array_merge($this->err_msg, $drive->err_msg);
            array_push($this->err_msg, "新たな表領域を作成出来ませんでした。");
            // Rollback
            $drive->delete_dg($conn_asm, $dg);
            return(FALSE);
        }
        
        // Create User
        $state_id = oci_parse($conn_db, "create user $id identified by $password default tablespace $tablespace quota unlimited on $tablespace");
        $result = oci_execute($state_id);
        if ($result == FALSE) {
            array_push($this->err_msg, "新たなユーザーを作成出来ませんでした。");
            // Rollback
            $drive->delete_tablespace($conn_db, $tablespace);
            $drive->delete_dg($conn_asm, $dg);
            return(FALSE);
        }

        // Grant Role to User
        $state_id = oci_parse($conn_db, "grant " . CLOUD_USER  . " to $id");
        $result = oci_execute($state_id);
        if ($result == FALSE) {
            array_push($this->err_msg, "ユーザーにロールを割り当て出来ませんでした。");
            // Rollback
            self::delete($conn_asm, $conn_db, $id);
            return(FALSE);
        }

        global $array_consumer_group;
        foreach ($array_consumer_group as $consumer_group) {
            $state_id = oci_parse($conn_db, "BEGIN dbms_resource_manager_privs.grant_switch_consumer_group(grantee_name => '$id',consumer_group => '$consumer_group',grant_option => FALSE);END;");
            $result = oci_execute($state_id);
            if ($result == FALSE) {
                array_push($this->err_msg, "ユーザーにコンシューマーグループオブジェクト権限を割り当て出来ませんでした。");
                // Rollback
                self::delete($conn_asm, $conn_db, $id);
                return(FALSE);
            }
        }

        $result = self::update_consumer_group($conn_db, $id, DEFAULT_CONSUMER_GROUP);
        if ($result == FALSE) {
            array_push($this->err_msg, "コンシューマーグループマッピングを作成出来ませんでした。");
            // Rollback
            self::delete($conn_asm, $conn_db, $id);
            return(FALSE);
        }
        return(TRUE);
    }